suchen

Heim  >  Fragen und Antworten  >  Hauptteil

symfony - Unique Constraint Wie kann vor dem Speichern festgestellt werden, dass dieselben Daten bereits vorhanden sind?

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?

大家讲道理大家讲道理2754 Tage vor780

Antworte allen(2)Ich werde antworten

  • 高洛峰

    高洛峰2017-05-16 16:46:44

    你可以根据你的约束规则,在插入前先查询一次,比如按照你的例子,先查询

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

    如果结果不为0,则说明继续插入会违反唯一规则。

    当然,实际上并不推荐这么做,每次插入都去检查是很费资源的
    你可以考虑使用

    INSERT IGNORE INTO
    

    然后在插入后检查affected_rows,如果返回为0说明数据插入失败,这时候再去进行检查是否违反了约束规则。

    Antwort
    0
  • 滿天的星座

    滿天的星座2017-05-16 16:46:44

    你應該使用Validation,

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

    Antwort
    0
  • StornierenAntwort