Yii relációs lekérdezések
Relációs aktív rekord
Már megvizsgáltuk az Active Record (AR) használatával az adatbázistábla adatainak kiválasztását. Ebben a részben bemutatjuk, hogyan használhatod az AR-t, ha több kapcsolódó táblát csatlakoztatsz, és egy sor kapcsolódó adatot kapsz. A relációs AR használata előtt ajánlott külföldi kulcskorlátokat megadni az adatbázis táblázatokhoz. Ez biztosítja a tárolt adatok konzisztenciáját és integritását. Az ebben a részben található példák egyértelműségére a következő entitások-kapcsolat diagramban (ER) bemutatott adatbázis sémát fogjuk használni.
Információ: A külföldi kulcskorlátozások támogatása különbözik a különböző DBMS-kben. Az SQLite 3.6.19 és a korábbi verziók nem támogatják a korlátozásokat, de táblázatok létrehozásakor továbbra is deklarálhatják azokat. A MyISAM MySQL motor nem támogatja a külföldi kulcsokat.
1. Az AR osztályok közötti kapcsolatok kialakítása
Mielőtt AR-t használna relációs lekérdezések végrehajtásához, létre kell hoznunk az AR osztályok közötti kapcsolatokat. A két AR osztály közötti kapcsolat közvetlenül a megfelelő adatbázis táblák közötti kapcsolatoktól függ. Szemszögéből az adatbázis, a kapcsolat a táblázatok A és B lehet három típusba sorolhatók: az egyik a többhöz (például tbl_user és tbl_post), egy-egy (például, tbl_user és tbl_profile) és sok-sok (például tbl_category és tbl_post). Az AR-ben négyféle link létezik:- BELONGS_TO. ha az A és B közötti kapcsolat egy-sok-sok, akkor B az A-hoz tartozik (például a Post a felhasználóhoz tartozik);
- HAS_MANY. ha az A és B táblák közötti kapcsolat egy-sok-sok, akkor A-nak sok B van (például a Felhasználónak sok Postja van);
- HAS_ONE. ez a HAS_MANY különleges eset. ahol A legfeljebb egy B lehet (például a felhasználónak csak egy profilja van);
- MANY_MANY. ez a kapcsolat megfelel az adatbázisban sok-sok-sok kommunikációnak. Mivel számos DBMS nem támogatja közvetlenül az ilyen típusú kapcsolatot, egy társulási táblázat szükséges ahhoz, hogy sok-sok kommunikációt egy-sok kapcsolaton keresztül alakítson át. Adatbázisunkban ez a cél az asztal tbl_post_category. Az AR terminológiában a MANY_MANY kapcsolat a BELONGS_TO és a HAS_MANY kombinációjaként írható le. A Post például számos kategóriába tartozik. és a kategória nagyon sok feladatot tartalmaz.
ahol varname - kapcsolat nevét, RelationType jelzi egy négy típusú kötvények, ClassName - neve AR-osztályú társított az osztály, és ForeignKey jelentése egy vagy több idegen kulcsok, hogy a használt kommunikációs. Ezenkívül számos további paramétert adhat meg, amelyeket később tárgyalunk. A következő kód mutatja be, hogyan kell létrehozni a kapcsolatot a Felhasználó és a Post osztály között.
2. Relációs lekérdezés végrehajtása
A relációs lekérdezés legegyszerűbb módja az AR osztály relációs tulajdonságának használata. Ha a fellebbezés történik az ingatlan az első alkalommal, akkor relációs lekérdezés, amely összeköti a két kapcsolódó táblákat, és hagyja csak a megfelelő adatokat az elsődleges kulcs az aktuális példányt AR. A lekérdezés eredményét a tulajdonságban a társult osztály példánya (vagy tömbje) tárolja. Ezt a megközelítést néha lusta betöltésnek is nevezik, amelyben a közvetlen lekérdezést csak a kapcsolódó objektumokhoz való első hozzáférés időpontjában hajtják végre. Az alábbiakban egy példa erre a megközelítésre:
Ezen felül, beágyazott mohó letöltéseket is végrehajthat. Ehhez a linknevek egyszerű listájának helyett a hierarchikus módon rendelt linkek nevét () kell átadni a () függvénynek, mint a következő példában:
3. Relációs lekérdezés a kapcsolódó modellek beszerzése nélkül
4. Relációs lekérdezési paraméterek
5. Az oszlopnév ütközések megszüntetése
Tipp: A kommunikációs táblázat alias alapértelmezés szerint megegyezik a link nevével. Ne feledje, hogy ha a másikban egy linket használ, az utolsó neve kerül felhasználásra. A szülő kapcsolat neve nem használható előtagként. Például a "szerző.csoport" hivatkozás alias "csoport", nem pedig "author.group".
Az alias kapcsolat tulajdonság beállításával elkerülheti a táblázati álnevek ütközését.
6. Relációs lekérdezés dinamikus paraméterei
7. A relációs lekérdezés teljesítménye
A mohó indításhoz ezt a paramétert dinamikusan állíthatjuk be:
8. Statisztikai lekérdezés
9. Relációs lekérdezések a megnevezett állapotcsoportokkal
A relációs lekérdezésben a feltételes állapotcsoportokat kétféleképpen lehet használni. Alkalmazhatók az alapmodellre és a kapcsolódó modellekre. A következő kód szemlélteti a fő modellre történő alkalmazásuk esetét:
Az 1.1.7-es verzióban lehetővé vált a paraméterek átadása a kommunikációs feltételek megnevezett csoportjainak. Például, ha a Post rendelkezik a megadott feltételcsoporttal. részesülő minimum minősítés rekord, használd a felhasználó a következő: Megjegyzés: verzió előtt 1.1.7 nevű körök alkalmazott kapcsolódó modelleket kell leírni CActiveRecord :: hatókörét. Ezért nem lehet paraméterezni.
10. Relációs lekérdezések át
Használat közben a kapcsolat definíciónak így kell kinéznie:
HAS_MANY keresztül
HAS_MANY keresztül ER
HAS_ONE keresztül
HAS_ONE keresztül ER
keresztül velem
keresztül használható egy hídhoz csatlakoztatott modellhez. Jelen esetben ez a felhasználó más felhasználókat is tanít:
az önálló ER-n keresztül
Az ügy kapcsán a következő összefüggéseket határozzák meg: