Minden az aktivecordról a yii 2 verzióban

A Yii-ban található ActiveRecord osztályt objektum-orientált felület hozza létre a tárolt adatbázis eléréséhez. Hasonló struktúrákat találhatunk más korszerűbb keretek között is: Laravel, CodeIgniter, Smyfony és Ruby. Manapság belevágunk a Yii 2.0 változatának megvalósításába, és megmutatom neked a leghasznosabb funkciókat.

Az intro osztály modell.

A Yii ActiveRecord a yii \ base \ Model bázis (a Model-View-Controller architektúra alapja) továbbfejlesztett változata. Most gyorsan megmagyarázom a Modell által örökölt ActiveRecord legfontosabb funkcióinak működését:

Az üzleti adatok attribútumokban tárolódnak. Itt vannak másolatok a nyilvános modellekről. Minden attribútum tömegesen hozzárendelhető: minden tömböt hozzárendelhet a modell attribútum tulajdonságához. Ez azért működik, mert az alap-osztálykomponens (amely a Yii 2.0 teljes verziója alapszintje) végrehajtja a __set () metódust. amely a Model osztályban más névvel rendelkezik - setAttributes (). Ugyanez vonatkozik az extrakcióra is: az attribútumok tulajdonsága alkalmazásával minden attribútum lekérhető. Ismét ez az attribútum a komponens osztályra épül, amely a __get () függvényt használja. azonos a getAttributes () attribútummal a Modell osztályban.

A modellek szintén ellátják a címke attribútumot, amelyet a célok megjelenítésére használnak, ami megkönnyíti a formákban történő felhasználás folyamatát.

A felhasználói beviteli modellhez küldött adatokat ellenőrizni kell, hogy azok megfelelnek-e az üzleti logikának. Ezt szabályokkal () adhatjuk meg. amely legalább egy vagy több érvényesítési attribútumot tartalmaz.

Alapértelmezésben csak az attribútumokat, amelyek státusza „védett” (ez azt jelenti, hogy a csekket meghatározott szabályoknak a számukra), beadható nagy mennyiségben.

A forgatókönyvek lehetővé teszik az adatok ellenőrzésének és feldolgozásának módját.

Hozzon létre egy ActiveRecord modellt.

Az ActiveRecord modell példája az adatbázis táblázatokban szereplő karakterlánc, tehát adatbázisra van szükségünk. Ebben a cikkben az adatbázis-terveket pontosan az alábbiakban bemutattam a képen. Ez a legegyszerűbb szerkezet, amelyet csak a blogbejegyzésekben használnak. A szerzőknek több cikkük is lehet, amelyek viszont több címkével rendelkezhetnek (lényegében egy hierarchikus rendszer). A cikkek kapcsolódnak a címkékhez az N: M linken keresztül, mert meg szeretnénk mutatni a címkék cikkalapú összekapcsolását. A "Cikkek" táblán a figyelem középpontjába kerülünk, mert a legérdekesebb linkkészlet.

A Gii kiterjesztést használtam egy olyan modell létrehozására, amely az adatbázis és a linkek alapján készült. Itt láthatja, mi történt az Adatbázis-struktúra által létrehozott Cikkek táblázatban, amikor megnyomja az egész pár kulcsot:

A fent leírt program darabja megmutatja, hogy mely attribútumok állnak rendelkezésre az egyes példákban. Megjegyzendő, hogy ez annak köszönhető, az osztály (class forgalmazás), akkor is használhatja a tulajdonságokat a linkelt adatok: az egyik a szerzők $ szerzők és sok a Articlestags [] $ articlestags.

A tableName () függvény határozza meg, hogy melyik adatbázis kapcsolódik az adott modellhez. Ez lehetővé teszi, hogy elkülönítse az osztály nevét a tényleges táblázat nevétől.

A szabályok () meghatározza a modell érvényesítési szabályait. Nincs meghatározó forgatókönyv, csak egy sor szabály. Ő egészen érthető; Jelzi a szükséges mezőket vagy a kívánt egész számot, egy karakterláncot.

A getAuthors () és a getArticlestags () függvény végén pedig meghatározzuk a tábla kapcsolatát másokkal.

Megjegyzés: "Nagyon meglepődtem, hogy megtudtam, hogy a" Format "attribútum elvesztette az összes tulajdonságot, ellenőrzést és címkét. Kiderül, hogy Gii nem támogatja az ENUM-okat. Ezenkívül a MySQL-ben csak a PostgreSQL támogatja azt, ezért nem kerül végrehajtásra. "

A modell befejezése.

Talán láttad, hogy a létrehozott osztálycikkekhez az asztal külsõ kulcsához definiált kapcsolatok vannak. Az N: M kapcsolatot a cikkek és a címkék között nem lehet automatikusan létrehozni, ezért manuálisan kell eljárnunk.

Minden hivatkozást visszaadunk példának a yii \ db \ ActiveQuery fájlba. A cikkek és a címkék közötti kapcsolat meghatározásához a ProductsTags-ot linktáblaként kell használni. Az ActiveQuery-ban ez egy táblázat meghatározásával történik. Az ActiveQuery erre a célra kétféle módszert kínál:

• via () lehetővé teszi meglévő hivatkozások használatát a jelenlegiek meghatározásához;

• ATable () segítségével megállapíthatja, hogy egy adott táblázat használható-e meglévő linkekhez.

A via () módszer lehetővé teszi a már meghatározott hivatkozások használatát a táblázatban. Példánkban azonban a ArticlesTags tábla nem tartalmaz fontos információkat erre vonatkozóan, ezért a viaTable () metódust használom.

Most, hogy minden hivatkozást azonosítottunk, elkezdhetjük használni a modellt.

A modell használata.

Hamarosan létrehozhatok kézzel töltött adatbázisokat.

Érdemes megjegyezni, hogy a fenti kódex néhány feltevést tartalmaz, amelyeket most megmagyarázok:

• A mentési () logikai elem eredményét nem értékeljük. Ez nem racionális, hiszen a Yii valójában az osztály validate () elemét hívja elő, és csak akkor tárolja az adatbázisban. Az INSERT az adatbázisban nem végezhető el a hibák ellenőrzésének szabályai szerint.

• Előfordulhat, hogy a különböző példányok azonosító attribútumait addig használják, amíg nincsenek megadva. Ez lehet biztonságos, mert a megtakarítás () okoz INSERT és fogadja cél adatkezelő elsődleges kulcs vissza az adatbázisból, és az értékeket a tulajdonságok teszik érvényes azonosítót.

• $ cikk-> LastEdited az DateTime érték az adatbázisban. Az aktuális dátumot és időt szeretném beilleszteni az NOW () függvény SQL-be ​​hívásával. Ezt a Expression osztály használatával teheti meg, amely lehetővé teszi, hogy különböző SQL kifejezéseket alkalmazzon ActiveRecord példányokra.

Ezután kiválaszthatja a cikket az adatbázisból:

Új és speciális funkciók.

Korábban nem volt minden információ a Yii ActiveRecordról. Nézzük még érdekesebbé a történetet, és tekintse át a Yii 2.0 verzió legújabb és megváltozott jellemzőit.

A Yii 2.0 képes megváltoztatni a megváltozott attribútumokat. Az ActiveRecordban ezt nevezzük "piszkos" attribútumoknak, mert az adatbázis frissítését igényli. Ez a képesség alapértelmezés szerint lehetővé teszi, hogy megtekinthesse, melyik attribútum megváltozott a modellben, és az adataik alapján jár el. Ha például az összes attribútumot tömegesen hozzárendeli a POST formából, de csak a megváltozott elemeket szeretné kiválasztani, tegye meg ezt:

ActiveRecord, a Modell kiterjesztése. végrehajtja a \ yii \ base \ Arrayable vonalat a toArray () metódussal. Ennek köszönhetően gyorsan átalakíthat egy modellt attribútumokkal tömbre. Van néhány szép extrával.

Általában, amikor felhívja a toArray () metódust, akkor hívja a mezőket () függvényt. amely egy adott programdarabot tömbké alakít át. Egy opcionálisan kiterjesztett paraméter a ToRray () függvényhez hozzáadja az extraFields () elemet is. diktálja, mely mezők is szerepelnek.

A mezőcsoport e két módja a BaseActiveRecordon keresztül valósul meg. de a modellt a toArray () metódus kimenetére állíthatja be.

Az én példámban azt szeretném, ha a kiterjesztett tömb minden cikkcímkét tartalmazna, vesszővel elválasztva:

Ezután szerezzen be egy tömböt az összes mezőre:

A Yii 1.1 verzió már végrehajtott néhány eseményt a CActiveRecord-ban. amelyek a Yii 2.0 verziójában maradnak meg. Az ActiveRecord funkcióciklusa a Yii 2.0 kézikönyvben nagyon jól mutatja az esemény kezdetét az ActiveRecord használatakor. Mindezeket az eseményeket az ActiveRecord példány környező normális műveletei okozzák. A nevek ilyen események elég nyilvánvaló, hogy megtalálja ki, amikor megindulnak: afterFind (), beforeValidate (), afterValidate (), beforeSave (), afterSave (), beforeDelete (), afterDelete ().

Példámban a LastEdited attribútum alkalmas egy esemény használatának bizonyítására. Biztosítani akarom, hogy a LastEdited mindig megjeleníti a cikk legutóbbi módosításait. Ezt két esemény között lehet megosztani: beforeSave () és beforeValidate (). A modellom a LastEdited-et a szükséges attribútumként jeleníti meg, tehát a beforeValidate () eseményt kell használnunk. Annak érdekében, hogy a modell egy új példányban legyen.

Ne feledje, hogy ha ezekkel az eseményekkel dolgozik, hívnia kell a szülő eseménykezelőt. A hamis (vagy semmi) érték vissza lesz adva a függvény eseményeinek, amíg a cselekvés megszűnik.

A viselkedés a meglévő komponensek funkcionalitását növelheti a kódok módosítása nélkül. Válaszolhat egy olyan eseményre is, amelyikhez csatolták. A Yii 2.0-ban számos rendelkezésre álló viselkedési lehetőség létezik:

• yii \ behaviors \ AttributeBehavior lehetővé teszi a frissítendő attribútumok megadását. Például beállíthat egy attribútum értéket a BEFORE_INSERT névtelen eseményfunkció alapján;

• yii \ behaviors \ BlameableBehavior pontosan azt teszi, amit javasol: valakit hibáztat. 2 attribútumot hozhat létre: createdByAttribute és updatedByAttribute. amelyet egy objektum létrehozásakor vagy frissítéskor az aktuális felhasználói azonosítóhoz kell beállítani;

• yii \ behaviors \ SluggableBehavior lehetővé teszi, hogy automatikusan hozzon létre egy URL-t egy attribútum alapján egy másik számára;

• Yii \ viselkedés \ TimestampBehavior lehetővé teszi, hogy automatikusan hozzon létre vagy frissítsen időbélyegei createdAtAttribute és updatedAtAttribute.

Az utolsó dolog, amit érdemes megérinteni, képes automatikusan használni a tranzakciókat a modellben. A külföldi kulcsok használatával lehetőség van az adatbázis lekérdezésére is, ami néha hibát okoz. De a tranzakció segítségével ez a probléma elkerülhető. A Yii lehetővé teszi a műveletek tranzakciókkal () végrehajtott műveleteinek meghatározását. Ne feledje, hogy vissza kell adnia a szabályt a SCENARIO_DEFAULT számára. ha ezt a műveletet alapértelmezés szerint végre kívánja hajtani:

következtetés:

Címkék: a Yii 2.0 verziója, az ActiveRecord, az ActiveRecord fő funkciói

Kapcsolódó cikkek