symfony - Unique Constraint Wie kann vor dem Speichern festgestellt werden, dass dieselben Daten bereits vorhanden sind?
大家讲道理
大家讲道理 2017-05-16 16:44:44
0
2
776
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);
}

Ich überprüfe nur, ob die gleichen Daten bereits in der aktuellen Datenbank vorhanden sind,
In den einzufügenden Daten sind jedoch bereits mehrere Teile derselben Daten enthalten.
Während des Einfügevorgangs werden diese Informationen also bereitgestellt
Beim Ausführen von „INSERT INTO Workflow (Workflow_Step_ID, Workflow_Status) VALUES (?, ?)“ mit den Parametern [„10“, „Assigned“]:

ist eine Ausnahme aufgetreten

SQLSTATE[23000]: Verletzung der Integritätsbeschränkung: 1062 Doppelter Eintrag „10-Assigned“ für Schlüssel „stepid_status_uniq“

  uniqueConstraints:
    stepid_status_uniq:
        columns: [ workflow_step_id, workflow_status ]

Ich habe eine eindeutige Einschränkung in der Datenbank erstellt (ich weiß nicht, ob das richtig ist)
Aber die Daten, die jetzt eingefügt werden, enthalten dieselben Daten vor dem Flash
Woher weiß ich, dass die aktuellen Daten gegen die eindeutige Regel verstoßen haben, bevor ich sie in der Datenbank speichere?

大家讲道理
大家讲道理

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

Antworte allen(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

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage