Az aktív rekordkapcsolatokkal való együttműködés az yii2-ben (populaterelation, link és t

A megközelítés normális leírása, soha nem találtam (kivéve a megjegyzéseket). Olvassa el a lyukak hivatalos útmutatóját, de az adatbázisban szereplő modellek írásának módszereit nagyon kímélő módon írják le. az Active Record dokumentációjának olvasása sem sokat segített.

És mégis szeretném megérteni ezt a kódot, ezzel a megközelítéssel, hogy megértsük, milyen lehetőségek vannak a keretbe beépítve, hogy ne kerítsük a kertet a meglévőhez.

Kérdések kód szerint:

  1. Hogyan működnek a beállítók ebben a példában? Honnan származnak az értékek a beállítókhoz ($ tags, $ cover, $ images).
  2. Mikor érkeznek az adatok az összekapcsolt modellekből (címkék, képek, főkép) az adatbázisba?
  3. Mi hiányzik ebben a kódban, hogy működjön?

Külön is szeretnék hivatkozni a Yii2-et használó komoly projektek repositoryjára. Szeretném látni a legjobb gyakorlatokat valódi komplex projektekben.

utoljára november 19., 15:08

$ Post> load (Yii :: $ alkalmazás-> request-> post () a betöltést végző modell szerint. Yii :: $ alkalmazás-> request-> post () függvény egy tömböt a form [ 'MyFormName [kulcs]' => ' value]. a terhelést az egyes ingatlanok a modell nevét kulcs be van állítva, ha vannak érvényesítési szabály az szabály, és a mező van írva a script számukra.

A getTags egy relé. Támogatja az ActiveRecord modell kommunikációját. A setTags úgy néz ki, mint egy szetter (szetter, ez egy olyan függvény, amelyet egy nem létező tulajdonság elérésekor neveznek), de ebben az esetben ez csak egy függvény. A társított modellt a populateRelation segítségével tárolja, és növeli az aktuális $ this-> tags_count számlálót. A közjavak problémájával szemben a számláló közvetlenül növelhető a setTags módszer hívása nélkül.

Hogyan működnek a beállítók ebben a példában? Honnan származnak az értékek a beállítókhoz ($ tags, $ cover, $ images).

setCover. setTags. setImages a modell belsejében a szokásos paraméterek átadásával hívják. Gondolom, hogy privátnak kell lenniük, és nem hívják meg az ügyfélkódtól (vezérlő).

Mikor érkeznek az adatok az összekapcsolt modellekből (címkék, képek, főkép) az adatbázisba?

A populateRelation hívása idején a kapcsolódó relék a modellben találhatók. A mentés a vezérlőben a mentési modell idején történik.

Mi hiányzik ebben a kódban, hogy működjön?

Írja újra mindent, csak példaként használja ezt a kódot. Szüksége van tapasztalatra, és ez megóvja Önt attól, hogy gondolkodjon olyan funkciókkal, mint a setTagsString. amelyeket nem használnak fel, és csak zavart okoznak. Egyértelmű lesz továbbá, hogy a getRelatedRecords módszerhez meg kell adni a képek és címkék táblázatait.

Javaslom a dokumentáció ezen részének átvételét és az egyes funkciók felvételét. Ez sokáig nem mentem el mindent magamtól, de ez lehetővé teszi a lehető legteljesebb ötletet az ActiveRecord keretrendszer képességeiről anélkül, hogy megkérdőjelezhető minőségű kódot ásna.

Ne felejtsük el felhívni az örökölt osztály módját az utómegtakarítási módszerben, amint azt a dokumentáció jelzi.> Ha ezt a módszert felülírja, győződjön meg róla, hogy a szülői végrehajtást az esemény bekövetkezésekor hívja. `public function afterSave ($ insert, $ changedAttributes)- Vladimir Jucov február 20, 16, 17:21

Hogyan működnek a beállítók ebben a példában? Honnan származnak az értékek a beállítókhoz ($ tags, $ cover, $ images).

Ez a PHP varázslat. Az alap osztályban a __get és a __set módszerek felülbírálhatók. amely átalakítja az írható-olvasható attribútumok $ foo-> bar = $ baz-> qwe a metódushívások $ foo-> setBar ($ baz-> getQwe ()). Ha a mágia nem tetszik, akkor közvetlenül hívhatja a módszereket.

Valójában ezek banális fogadók és beállítók. Egyes nyelvek tulajdonságokkal rendelkeznek (getters és setters, egyetlen egységben egyesülnek), de a PHP nem támogatja őket.

Mikor érkeznek az adatok az összekapcsolt modellekből (címkék, képek, főkép) az adatbázisba?

Ha a mentési mód hívása az ActiveRecordból történik. Ezen a ponton az adatok érvényesítésre kerülnek, és ha az érvényesítés megy végbe, akkor az ActiveRecord adatait és az összes kapcsolódó adatot rögzítik.

Mi hiányzik ebben a kódban, hogy működjön?

Ezt a kérdést nem lehet megválaszolni addig, amíg el nem mondja, mi nem működik.

Külön is szeretnék hivatkozni a Yii2-et használó komoly projektek repositoryjára. Szeretném látni a legjobb gyakorlatokat valódi komplex projektekben.

Ok. Ezt értem. Itt megnézem a vezérlőt, és megnézem, hogy a \ Yii :: $ app-> request-> post () ['Post'] adata betöltődik-e ugyanabba a $ postba. Minden világos. De nem biztos, hogy ez elég ahhoz, hogy a kapcsolódó modellek is kitöltődjenek. Különösen érdekes ebben a tekintetben a setTagsString () metódus, amely olyan, mint egy szetter, de nem olyan, mint egy szetter. Legalábbis az én esetemben a kapcsolódó modellek nem töltődnek be. $ this-> getRelatedRecords () a beforeSeve () és afterSave () függvényben nem ad vissza semmit, valójában nem mágia történik. - Denis Khvorostin november 19-én, 03. 16:17 órakor

Kapcsolódó cikkek