Zend Framework

Nemrég kezdtem el használni a ZF-et, és mivel szeretem összeírni mit hogyan oldok meg, létrehoztam ezt a fórumot.

A helyesírásomat ne fikázd, tudom hogy szörnyü, ez van sajnos, hiába olvasok 12 éves korom óta baromi sok sci-fit, az írásom nem javul.

Lelkes weblap fejlesztő vagyok, nem értek a dizájnhoz, elboldogulok vele, de nem az én asztalom, a programozást viszont egyenesen imádom.

Remélem már nem tartozom a szakmában a pistikék közé, de még profinak sem nevezném magam, lelkes haladó osztályt választom :)

Ha valamire kíváncsi vagy, segítség kell php jacascript html css témakörben ( ne kérj tőlem olyat hogy ezt csináld meg nekem pls ) csak kérdezz bátran. Értelmes vitákba is szívesen bonyolódom, tágítsuk nézeteinket.

Címkék

code (1) doctrine (2) etc (2) module (1) security (1) users (1) zf (4) Címkefelhő

Friss topikok

Doctrine használatáról

2010.03.20. 00:01 Mokacuka

A doctrine használatáról kicsit bővebben akarok írni, ezért több részben teszem meg. Előző posztomban már leírtam, hogy hogyan lehet implementálni ( asszem ez a helyes szó erre ) a doctrine-t a ZF -be. Nem törekszek a részletes leírásra, nem is menne, nem vagyok tanár. olvass utánna, csak segítséget nyújtok. De ha kérdésed van, várom hozzászólásban.

Most essen szó, az adatbázis felépítéséről. Doctrine-ben az adatbázist YAML fájlban (.yml) lehet leírni, megadni a táblákat, relációkat, mezők tipusát. A hogyant itt, a doctrine oldalán eltudod olvasni.

Ha nincsenek relációk a táblák között, akkor nagyon egyszerü egy tábla leírása yml formában:

táblaneve:
  columns:
    mező_neve:
      type: tipus(méret)

Gondolom feltünt, hogy a táblanévhez képest a mező neve 2 db szóközzel van beljebb, és a mező névhez képest a tipus ismét két szöközzel van beljebb. Ezt a formát mindig megkell tartani, azzal hogy beljebb van, jelezzük pl, hogy a type attributum a mező_neve -hez tartozik, ha két szóközzel kijebb lenne, akkor a columns -hez tartozna.

Idegesítő, nehéz és lassú lenne az adatbázist így, közvetlenül a yaml fájl szerkesztésével elkészíteni, ezért ajánlom mindenki figyelmébe az ORM Designer -t. Fizetős, de 15 nap próba verzió teljes értékü ( és mondjuk virtualbox -ban az állapot mentése csodákra képes ) de ha megtetszik és rendszeresen dolgozol vele, vedd meg.

A táblákat és a táblák közötti kapcsolatot ( az Ms Accashez hasonlóan ) grafikus felületen lehet megtervezni. Praktikus, és gyors. Közvetlenül elmenti a megtervezett adatbázist a doctrine számára yml formába.

Táblák létrehozása yml fájlból
neten fent van sok helyen, de azért leírom:

//db törlélse
Doctrine::dropDatabases();
//db létrehozása
Doctrine::createDatabases();
		
//modellek legenerálása yml fájlból, modelsPath egy létezö, írható
//könyvtár legyen
Doctrine::generateModelsFromYaml( $ymlFile , $modelsPath );
//a modellekből létrehozza az adatbázis táblákat
Doctrine::createTablesFromModels( $modelsPath );

Ennyi az egész. Vigyázat! rögtön az elején törli az aktuális kapcsolatban beállított adatbázist, majd létrehozza ( így törölve az öszes előző adatot ).

Rekordok hozzáadása a táblához:

van egy táblánk, aminek a definiciója így néz ki:

User:
  columns:
    id:
      primary: true
      unique: true
      type: integer
      notnull: true
      autoincrement: true
    username: string(255)
    password: string(255)

A doctrine létrehoz egy User nevü osztályt, ez az osztály fogja egy rekordját reprezentálni a táblának. A User osztálynak 3 tulajdonsága van, id, username és password.

$user = new User();
$user->username = 'teszt';
$user->password = 'jelszo';
$user->save();

Ennyi az egész, ha egy új rekordot akarunk felvenni. a save() eljárás meghívása fontos, ekkor történik a rekord elmentése (elméletileg unset hatására automatikusan meghívódik )

Rekord kiolvasása táblából

Ezt több módon is megtehetjük.

$user = Doctrine_Manager::connection()->getTable( 'User' )->find( $id );

Ahol az id az elsődleges kulcs. Lehet keresni bármely mező alapján is, az sql parancs where részét megadva, kicsit módosítva, DQL -nek nevezi a doctrine.

$users = Doctrine_Manager::connection()
           ->getTable( 'User' )
           ->findByDql( 'username = ? AND password = ?' , array( $username , $password ) );

Ilyen formában megadva a keresést, a két változót, $username, $password , autómatikusan ellenörzi és meggátolja, hogy rajta keresztül sql kódot lehessen beszurni. A kérdőjelek helyére lesz beillesztve, sorrendben a két véltozó, ami tömbként lett átadva. Ha csak egy változónk van ( egy kérdőjel ) , simán, array nélkül is átlehet adni.

Gondolom feltünt, hogy a változó neve, amiben a rekordot tárolom, $user -ből $users lett. Ez azért történt, mert a findByDql nem egy rekordot ad vissza ( fenti példában jó esetben csak egyet, de akár több is lehetne ). Egy Doctrine_Collection osztályt ad vissza, ami több rekord gyüjtője. Fontosabb müveletek, amit ezzel az objektummal tenni tudunk, és amivel kitudjuk szedni belőle a rekordokat:

Ha tudjuk, hogy max 1 rekordot kapunk, vagy 1-et sem ( fenti példa ilyen ):

// count() fügvény megmondja, hogy hány rekord van a collection-ben
if( $users->count() == 1 )
{
    // getFirst() a legelső recordot adja vissza
    $user = $users->getFirst();

    /**
     * do stuffs $user -el
     */
}

//Ha x darab rekordunk van
if( $users->count() > 0 )
{
   foreach( $users as $user )
   {
      /**
       * do stuffs $user -el
       */
   }
}


Kövi részben az adat táblák közötti relációkról írok pár sort.

Szólj hozzá!

Címkék: doctrine

A bejegyzés trackback címe:

https://zend-framework.blog.hu/api/trackback/id/tr321853655

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása