symfony - Unique Constraint 在保存前如何判斷已經有同樣數據?
大家讲道理
大家讲道理 2017-05-16 16:44:44
0
2
729
if(!$workflow_entity = $em->getRepository('AlbatrossAceBundle:Workflow')->findByIdAndStatus($line[$titleArr['WorkflowStepID']],$line[$titleArr['WorkflowStatus']])){
                        $workflow_entity = new Workflow();
                        $workflow_entity->setWorkflowStatus($line[$titleArr['WorkflowStatus']]);
                        $workflow_entity->setWorkflowStepID($line[$titleArr['WorkflowStepID']]);
                        $em->persist($workflow_entity);
}

我只檢查目前資料庫中是否已經有相同的數據,
但正在插入的資料中已經有數個是一樣的資料.
所以插入操作時, 給了這樣的資訊
An exception occurred while executing 'INSERT INTO workflow (workflow_step_id, workflow_status) VALUES (?, ?)' with params ["10", "Assigned"]:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10-Assigned' for key 'stepid_status_uniq'

  uniqueConstraints:
    stepid_status_uniq:
        columns: [ workflow_step_id, workflow_status ]

我已經在資料庫中創建唯一約束(我不知道這樣說對不對)
但現在正要插入的數個資料在flash 之前就存在同樣的資料
我如何在儲存到資料庫之前就知道目前資料已經違反唯一規則了呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回覆(2)
小葫芦

你可以根據你的約束規則,在插入前先查詢一次,例如按照你的例子,先查詢

SELECT count(*) FROM workflow WHERE workflow_step_id='10' AND workflow_status='Assigned'

如果結果不為0,表示繼續插入會違反唯一規則。

當然,其實不建議這麼做,每次插入都去檢查是很費資源的
你可以考慮使用

INSERT IGNORE INTO

然後在插入後檢查affected_rows,如果返回為0說明資料插入失敗,這時候再去進行檢查是否違反了約束規則。

滿天的星座

你應該使用Validation,

http://symfony.com/doc/master/reference/constraints/UniqueEntity.html

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!