cari

Rumah  >  Soal Jawab  >  teks badan

symfony - Kekangan Unik Bagaimana untuk menentukan bahawa data yang sama sudah wujud sebelum disimpan?

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);
}

Saya hanya menyemak sama ada data yang sama sudah ada dalam pangkalan data semasa,
Tetapi sudah ada beberapa keping data yang sama dalam data yang disisipkan.
Jadi semasa operasi sisipan, maklumat ini diberikan
Pengecualian berlaku semasa melaksanakan 'INSERT INTO workflow (workflow_step_id, workflow_status) VALUES (?, ?)' dengan params ["10", "Assigned"]:

SQLSTATE[23000]: Pelanggaran kekangan integriti: 1062 Entri pendua '10-Ditugaskan' untuk kunci 'stepid_status_uniq'

  uniqueConstraints:
    stepid_status_uniq:
        columns: [ workflow_step_id, workflow_status ]

Saya telah mencipta kekangan unik dalam pangkalan data (saya tidak tahu sama ada ini perkara yang betul untuk dikatakan)
Tetapi data yang sedang dimasukkan kini mempunyai data yang sama sebelum kilat
Bagaimanakah saya tahu bahawa data semasa telah melanggar peraturan unik sebelum menyimpannya ke pangkalan data?

大家讲道理大家讲道理2750 hari yang lalu772

membalas semua(2)saya akan balas

  • 高洛峰

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

    Anda boleh bertanya sekali sebelum memasukkan mengikut peraturan kekangan anda Contohnya, mengikut contoh anda, tanya dahulu

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

    Jika hasilnya bukan 0, bermakna teruskan memasukkan akan melanggar peraturan unik.

    Sudah tentu, ini sebenarnya tidak disyorkan. Ia sangat intensif sumber untuk menyemak setiap kali anda memasukkannya
    Anda boleh pertimbangkan untuk menggunakan

    INSERT IGNORE INTO
    

    Kemudian periksa barisan yang terjejas selepas memasukkan Jika ia mengembalikan 0, ini bermakna pemasukan data gagal Pada masa ini, semak sama ada peraturan kekangan dilanggar.

    balas
    0
  • 滿天的星座

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

    Anda harus menggunakan Pengesahan,

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

    balas
    0
  • Batalbalas