symfony - Kekangan Unik Bagaimana untuk menentukan bahawa data yang sama sudah wujud sebelum disimpan?
大家讲道理
大家讲道理 2017-05-16 16:44:44
0
2
771
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?

大家讲道理
大家讲道理

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

membalas semua(2)
小葫芦

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.

滿天的星座

Anda harus menggunakan Pengesahan,

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan