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
+
0
-

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
+
0
-

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íš.

Zax
Člen | 370
+
0
-

Konkrétně pro slug používám Gedmo Sluggable a funguje dobře, automaticky ošetřuje i duplicity. Vím, že někteří tu Gedmo moc nemusí, ale myslím, že stojí aspoň za zvážení..