symfony2, doctrine2, generált id elérése
Sziasztok!
Symfony2/Doctrine/MySql problémám adódott.
Van egy Question entitym 'id', 'created_at' és egyéb nem lényeges attribútumokkal. Egy Question egy felhasználó által feltehető kérdést tartalmaz. Szeretnék a kérdésekhez egy 'slug' attribútumot is eltárolni, ami egy az id és created_at mezőkből álló URL-hez használt stringet tartalmazna pl: '2011-08-21-3214' , amennyiben ez a mai napon került felvitelre és a 3214 es id-je van az adatbázisban.
A slug generálását megtehetném a prePersist esemény lefutásakor, de ekkor még nem ismert, hogy mi lesz a rekord id-je, esetleg a postPersist-ben - ekkor már ismert - de a mentés után nyilván már késő.
A kérdésem tehát az volna, hogy van-e valami ötletetek, esetleg máshogy kéne megközelítenem a problémát.
Köszönöm!
■ Symfony2/Doctrine/MySql problémám adódott.
Van egy Question entitym 'id', 'created_at' és egyéb nem lényeges attribútumokkal. Egy Question egy felhasználó által feltehető kérdést tartalmaz. Szeretnék a kérdésekhez egy 'slug' attribútumot is eltárolni, ami egy az id és created_at mezőkből álló URL-hez használt stringet tartalmazna pl: '2011-08-21-3214' , amennyiben ez a mai napon került felvitelre és a 3214 es id-je van az adatbázisban.
A slug generálását megtehetném a prePersist esemény lefutásakor, de ekkor még nem ismert, hogy mi lesz a rekord id-je, esetleg a postPersist-ben - ekkor már ismert - de a mentés után nyilván már késő.
A kérdésem tehát az volna, hogy van-e valami ötletetek, esetleg máshogy kéne megközelítenem a problémát.
Köszönöm!
Muszáj még egyszer eltárolni
Igen, azt hiszem mindenképp
Ugyan rendelkezésre áll mindkét mező, de akárhányszor meg akarom valahol jeleníteni a linket, akkor generálni kéne a slug-ot, valamint a slug alapján rekord visszakeresés is sokkal lassabb, ha nincs eltárolva.
Egy szimpla UPDATE-tel nagyon
Hm, nem ment el az előző
Szóval igen, nem rajongok az updateért, mert akkor egy rekord beszúrásához 2 adatbázisművelet kell, de ha nincs más megoldás, akkor ezt valahogy szeretném a doctrine keretein belül megoldani, ne kelljen a controllerben, vagy akárhol máshol még valamit meghívni hozzá.
Van mondjuk a doctrine entityknek egy postPersist eseménye is, amiben már le tudnám generálni ezt a slug mezőt az id alapján, mert ez pont a beszúrás után fut le, de nem tudom mennyire szép dolog, innen - az entitáson belülről - elérni az entity managert, ami az objektumok eltárolását végzi és szólni, hogy most "magamat" updatelni kéne.
Szerintem nem nagyon lehet
én most ismerkedem
Én most ismerkedem a Symfony2-vel és azon belül ezzel a Doctrinnel. A példaoldalon azonban feltűnt nekem pontosan az, amit te is említesz, hogy ott 2 adatbázis művelettel update-el a rendszer, hiszen először visszakéri a recordot, majd jön a tulajdonképpeni update (példa innen http://symfony.com/doc/current/book/doctrine.html). Ezt miért így kell? Egy sima update művelettel meg lehetne oldani, nem? Használjam a Doctrine-t vagy sem a symfony2-höz? Tudom egyáltalán a doctrine-t mellőzni a symfony2-ben?
{
$em = $this->getDoctrine()->getManager();
$product = $em->getRepository('AcmeStoreBundle:Product')->find($id);
if (!$product) {
throw $this->createNotFoundException('No product found for id '.$id);
}
$product->setName('New product name!');
$em->flush();
return $this->redirect($this->generateUrl('homepage'));
}
Én az id-t nem raknám bele a
Sajnos nincs beszédesebb
Azon persze lehet vitatkozni, hogy a domain.com/question/2011-08-21-3242 szebb-e, mint a domain.com/question/3242 , de szeretném, ha benne lenne az url-ben a dátum is.
Amikor lehet, akkor a fent linkelt extensiont használom, de az sajnos csak string típusú attribútum(ok)ból tud slugot gyártani, se Id, se DateTime nem jó neki, InvalidMappingExceptiont dob:
Cannot slug field - [created] type is not valid and must be 'string'
route
Köszi, az url lehet, hogy
Ha mégis szükségem lenne olyan slugra, amiben az id is szerepel, akkor lehet egy eventet definiálni, ami egy Question objektum létrehozásakor hívódik meg, és ez az event updatelné a slug mezőt. Annyiból szép, hogy doctrinen belül marad az egész, de két lekérdezés és két külön helyen van megvalósítva a Question entitás.
Ha mindenképpen tárolni
setter
Ezért megérte hozzászólnod.
csak ha nem kell bele id
A Symblog tutorial oldalán a név átalakítására van egy egész frappáns megoldás, aminek a végére fűzve a dátumot még egy nagy valószínűséggel egyedi slugod lesz.
Akkor jol sejtettem, hogy
Ha jol emlekszem, doctrinebol a generalt id, ujabb muvelet nelkuli eleresere vonatkozott a kerdes.