Doctrine UniqueConstraint

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
pitr82
Člen | 121
+
0
-

Jak řešíte kolizi v unikátních sloupcích při vkládání / updatu?

1. Při flushování zachytit vyjímku

\Doctrine\DBAL\Exception\UniqueConstraintViolationExceptio

-pak si můžu vypsat ze zachycené vyjímky sloupec, ktery toto způsobil.
-ale již nemám k dispozici EntityManager

2. použít metodu EntityManager->safePersist
-nedozvím se, který sloupec toto zavinil (nedám zprávu uživateli)
-neschodím EntityManager

3. položit dotaz, jestli zadané hodnoty nejsou již v použity v unikátních sloupcích
-můžu dát zprávu uživateli
-Mám Entity Manager

Momentálně používám možnost 1. V případě neúspěchu nevytvářím log (zápis do DB) jinak bych to řešil 3.

Editoval pitr82 (9. 3. 2016 21:49)

harmim
Člen | 26
+
+1
-

Já to většinou řeším tou 3. možností, protože často potřebuji dát uživateli zprávu, že taková hodnota již existuje. Ale záleží na konkrétní situaci.

abc
Člen | 92
+
0
-

1 jaktože nemáš Entity Manager?
3 je blbě – co když tam ty data mezitím tím zjištěním a vložením někdo vloží?

Správně je 1)

Editoval abc (10. 3. 2016 0:20)

Oli
Člen | 1215
+
0
-

pak si můžu vypsat ze zachycené vyjímky sloupec, ktery toto způsobil.

Jde to nějak hezky nebo jen podobnými oklikami?

pitr82
Člen | 121
+
0
-

@oli presne takto to detekuji v bode 1.