symfony - Contrainte Unique Comment déterminer que les mêmes données existent déjà avant de les sauvegarder ?
大家讲道理
大家讲道理 2017-05-16 16:44:44
0
2
778
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);
}

Je vérifie uniquement si les mêmes données sont déjà dans la base de données actuelle,
Mais il y a déjà plusieurs éléments des mêmes données dans les données en cours d'insertion.
Ainsi lors de l'opération d'insertion, cette information est donnée
Une exception s'est produite lors de l'exécution de « INSERT INTO workflow (workflow_step_id, workflow_status) VALUES (?, ?) » avec les paramètres ["10", "Assigned"] :

SQLSTATE[23000] : Violation de la contrainte d'intégrité : 1062 Entrée en double '10-Assigned' pour la clé 'stepid_status_uniq'

  uniqueConstraints:
    stepid_status_uniq:
        columns: [ workflow_step_id, workflow_status ]

J'ai créé une contrainte unique dans la base de données (je ne sais pas si c'est la bonne chose à dire)
Mais les données qui sont insérées ont maintenant les mêmes données avant le flash
Comment puis-je savoir que les données actuelles enfreignent la règle unique avant de les enregistrer dans la base de données ?

大家讲道理
大家讲道理

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

répondre à tous(2)
小葫芦

Vous pouvez interroger une fois avant d'insérer selon vos règles de contrainte. Par exemple, selon votre exemple, interrogez d'abord

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

Si le résultat n'est pas 0, cela signifie que continuer l'insertion violera la règle unique.

Bien sûr, cela n'est en fait pas recommandé. Il faut beaucoup de ressources pour vérifier chaque fois que vous l'insérez
. Vous pouvez envisager d'utiliser

INSERT IGNORE INTO

Vérifiez ensuite les lignes affectées après l'insertion. S'il renvoie 0, cela signifie que l'insertion des données a échoué. À ce stade, vérifiez si les règles de contrainte sont violées.

滿天的星座

Vous devez utiliser la validation,

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal