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 ?
Vous pouvez interroger une fois avant d'insérer selon vos règles de contrainte. Par exemple, selon votre exemple, interrogez d'abord
.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
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