Jaká je best practice u automaticky generovaného unique sloupce v Doctrine?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Oli
- Člen | 1215
Ahoj,
jaká je best practice, když chci automaticky vytvořit data, která se
předají databázi do sloupce unique? Například slug
. Mám
nadpis Nový článek ⇒ novy-clanek
. Pokud chci vložit další
nový článek, tak aby mě to vložilo automaticky novy-clanek-2
a
neobtěžoval jsem uživatele hláškou ve stylu „Slug už v db
existuje“.
V NDBT jsem to žešil takhle:
$counter = NULL;
retryNew:
try
{
$filename = $name.$counter;
$this->database->table('neco')->where($idColumn, $id)->update(array($columnName => $fileName));
}
catch (\Exception $e)
{
if ($e->getCode() === '23000')
{
$counter++;
goto retryNew;
} else
{
throw $e;
}
}
Tohle ale v Doctrine použít nelze. Jak se to teda řeší správně/čistě?
Díky
- jiri.pudil
- Nette Blogger | 1032
Jestli používáš Kdyby\Doctrine, je tam na to metoda
safePersist
, která v případě duplicity vyhodí
Kdyby\Doctrine\DuplicateEntryException
, ale na rozdíl od
doctriního persistu nerozbije entity manager, takže ji můžeš použít
v cyklu obdobně jako to, co uvádíš.