Mamy dwie klasy modeli:

  1. <?php
  2. class Accounts extends Zend_Db_Table_Abstract
  3. {
  4. protected $_name = 'accounts';
  5. protected $_dependentTables = array('Bugs');
  6. }
  7. ?>


  1. <?php
  2. class Bugs extends Zend_Db_Table_Abstract
  3. {
  4. protected $_name = 'bugs'; 
  5. protected $_dependentTables = array('BugsProducts');
  6. protected $_referenceMap = array(
  7. 'Reporter' => array(
  8. 'columns'  => 'reported_by',
  9. 'refTableClass'  => 'Accounts',
  10. 'refColumns' => 'account_name'
  11. ),
  12. 'Engineer' => array(
  13. 'columns'  => 'assigned_to',
  14. 'refTableClass'  => 'Accounts',
  15. 'refColumns' => 'account_name'
  16. ),
  17. 'Verifier' => array(
  18. 'columns'  => array('verified_by'),
  19. 'refTableClass'  => 'Accounts',
  20. 'refColumns' => array('account_name')
  21. )
  22. );
  23. }
  24. ?>


W pierwszej ustawiamy zależne klasy modeli, a więc klasa "Accounts" zależy od klasy "Bugs". W klasie "Bugs" zaś ustawiamy referencje tej klasy dla modelu "Acconuts". Zauważyć należy, że są ustawione 3 różne referencje - każde z innym pole relacji pomiędzy tablicami.

Przykład użycia:

  1. <?php
  2. $accountsTable = new Accounts(); // inicjacja "Account"
  3. $accountsRowset = $accountsTable->find(1234); // wyszukanie usera o ID 1234
  4. $user1234 = $accountsRowset->current(); // pobiera bieżący wiersz
  5. $bugsAssignedToUser = $user1234->findDependentRowset('Bugs', 'Engineer'); // pobiera model z referencji tablicy "Bugs" i jednej z ustalonych trzech ról - tutaj "Engineer"
  6. $bugs1234 = $bugsAssignedToUser->current(); // bieżący wiersz referencyjnej tablicy
  7.  
  8. $name = $user1234->name; // nazwa uzytkownika
  9. $bug = $bugs1234->message; // wiadomosc o bledzie
  10. ?>


Trochę to skomplikowane chcąc pobrać jedno pole z tablicy Account i jedno pole z tablicy Bugs. Czy nie da się tego uprość?

Jak znaleźć rekord, gdzie warunek występuję w obu tablicach? Np. accounts.id = 1234 AND bugs.code = 1.

Czy jest w stanie ktoś pomóc mi w tym temacie? Czy nikt z Was nie bawił się ZF?