Witaj, Gościu O nas | Kontakt | Mapa
Wortal Forum PHPEdia.pl Planeta Kubek IRC Przetestuj się!

Propel, czyli wydajna i wygodna obsługa baz danych w PHP5

Złożone struktury danych

Widzimy na nim wpis foreign-key, który powoduje, że w klasie BookPeer zostanie wygenerowanych kilka dodatkowych metod, m.in.: BookPeer::getPublisher() i BookPeer::setPublisher($pub). Metody te operują na pełnych obiektach, a nie na identyfikatorach, więc w bardzo łatwy sposób możemy odczytać lub zmienić powiązane dane.

Również w klasie BaseBookPeer znalazł się ciekawy fragment kodu:

BaseBookPeer::doSelectJoinPublisher(Criteria $c)

Metoda ta pozwala zapytać o książki spełniające kryteria $c i jednocześnie pobrać dane wydawcy przypisanego do danej książki. To bardzo łatwy sposób na budowanie zapytań zwracających obiekty przechowywane w więcej niż jednej tabeli.

Oprócz relacji jeden do wielu, w realnym projekcie spotkamy też powiązania typu wiele do wielu. Przyjęty w Propelu model mapowania obiektów do tabel jest trochę uproszczony, gdyż klasy prawie dokładnie odpowiadają tabelom w DB. Ta zasada odnosi się również do tabel łączących. Niestety, Propel nie zamaskuje całkowicie faktu istnienia tabeli pośredniej: trzeba ją faktycznie zadeklarować w XML-owym pliku schematu.

Relacje różnego typu to nie jedyna złożona struktura danych, która jest obsługiwana przez Propela. Biblioteka ta oferuje również proste wsparcie dla hierarchii dziedziczenia i struktur drzewiastych.

Listing 3. Schemat bazy danych opisany w XML

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<!DOCTYPE database SYSTEM "../dtd/database.dtd">
<database name="bookstore" defaultIdMethod="native">
  <table name="book" description="Book Table">
    <column name="book_id" required="true" primaryKey="true"
      autoIncrement="true" type="INTEGER" description="Book Id"/>
    <column name="title" required="true" type="VARCHAR" size="255"
      description="Book Title"/>
    <column name="isbn" required="true" type="VARCHAR" size="24" 
      phpName="ISBN" description="ISBN Number"/>
    <column name="publisher_id" required="true" type="INTEGER" 
      description="Foreign Key Publisher"/>
    <column name="author_id" required="true" type="INTEGER" description=
      "Foreign Key Author"/>
    <foreign-key foreignTable="publisher">
      <reference local="publisher_id" foreign="publisher_id"/>
    </foreign-key>
    <foreign-key foreignTable="author">
      <reference local="author_id" foreign="author_id"/>
    </foreign-key>
  </table>
  <table name="publisher" description="Publisher Table">
    <column name="publisher_id" required="true" primaryKey="true"
      autoIncrement="true" type="INTEGER" description="Publisher Id"/>
    <column name="name" required="true" type="VARCHAR" size="128" 
      description="Publisher Name"/>
  </table>
  <table name="author" description="Author Table">
    <column name="author_id" required="true" primaryKey="true"
      autoIncrement="true" type="INTEGER" description="Author Id"/>
    <column name="first_name" required="true" type="VARCHAR" size="128"
      description="First Name"/>
    <column name="last_name" required="true" type="VARCHAR" size="128"
      description="Last Name"/>
  </table>
  <table name="review" description="Book Review">
    <column name="review_id" required="true" primaryKey="true"
      autoIncrement="true" type="INTEGER" description="Author Id"/>
    <column name="reviewed_by" required="true" type="VARCHAR" size="128"
      description="Reviewer Name"/>
    <column name="review_date" required="true" type="DATE" description=
      "Date of Review"/>
    <column name="recommended" required="true" type="BOOLEAN" 
      description="Does reviewer recommend the book?"/>
    <column name="book_id" required="true" type="INTEGER"  description=
      "Book ID for this review"/>
    <foreign-key foreignTable="book" onDelete="CASCADE">
      <reference local="book_id" foreign="book_id"/>
    </foreign-key>
  </table>
</database>
Informacje na podobny temat:
Wasze opinie
Wszystkie opinie użytkowników: (0)
Mentax.pl    NQ.pl- serwery z dodatkiem świętego spokoju...   
O nas | Kontakt | Mapa serwisu
Copyright (c) 2003-2024 php.pl    Wszystkie prawa zastrzeżone    Powered by eZ publish Content Management System eZ publish Content Management System