Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Zend] Relacje
Fluke
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 9
Dołączył: 20.09.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Witam. Ostatnio eksperymentuje z Zendem i mam problem z relacjami. Wiem jak zrobić proste relacje ale nie wiem w jaki sposób zrobić o to przykłąd:
W pewnej relacji wybieramy jakieś rekordy z tabeli związanej ale chcemy do tego ograniczyć pewne żeczy np: jeżeli pole "ABC" != NULL czyli warunek where.

Przykład:
Tabela "Users" ||--->00 'images'
Wybieramy 1 użytkownika i wszystkie jego obrazki ale nie wybieramy tych które mają wartość "active" == NULL

Mam o to taki kod:
  1. <?php
  2.  
  3. //Rodzic
  4. class A extends Zend_Db_Table_Abstract {
  5. protected $_name = 'a';
  6. protected $_primary_key = 'aID';
  7. protected $_dependentTable = array('B');
  8.  
  9. function get($id) {
  10. $Result = $this->find($id);
  11.  
  12. $RowCurrent = $Result->current();
  13. $Dep = $RowCurrent->findDependentRowset('B');
  14. //...
  15. }
  16. }
  17.  
  18. //Dziecko
  19. class B extends Zend_Db_Table_Abstract {
  20. protected $_name = 'b';
  21. protected $_primary_key = 'bID';
  22. protected $_referenceMap = array(
  23. 'A' => array(
  24. 'columns' => array('aID'),
  25. 'refColumns' => array('bID'),
  26. 'refTableClass' => 'A'
  27. )
  28. );
  29. }
  30. ?>


Wszystko fajnie wybiera ale właśnie chce jeszcze ograniczyć po przez jakieś wartośći.

Z góry dziękuję.

Chyba znalazłem swoją odpowiedź ale nie wiem czy dobrze że tak się robi.
Mianowicie, żeby ograniczyć jeszcze w jakiś sposób trzeba skorzystać z metody 'select' z Zend_Db_Table_Select.

Czyli jeżeli mamy:
  1. <?php
  2.  
  3. //Rodzic
  4. class A extends Zend_Db_Table_Abstract {
  5. protected $_name = 'a';
  6. protected $_primary_key = 'aID';
  7. protected $_dependentTable = array('B');
  8.  
  9. function get($id) {
  10. $Result = $this->find($id);
  11.  
  12. //Dodajemy tutaj te 2 liniki
  13. $ModelB = new B();
  14. $query = $ModelB->select()->where('pole1 = ?', 2);
  15.  
  16. $RowCurrent = $Result->current();
  17. $Dep = $RowCurrent->findDependentRowset('B', null, $query); //oraz objekt typu Zend_Db_Table_Select czyli $query
  18. //...
  19. }
  20. }
  21.  
  22. //Dziecko
  23. class B extends Zend_Db_Table_Abstract {
  24. protected $_name = 'b';
  25. protected $_primary_key = 'bID';
  26. protected $_referenceMap = array(
  27. 'A' => array(
  28. 'columns' => array('aID'),
  29. 'refColumns' => array('bID'),
  30. 'refTableClass' => 'A'
  31. )
  32. );
  33. }
  34. ?>

Nie wiem tylko do czego służy to null w metodzie findDependentRowset();
Nie wiem czy jest to dobrze ale na pewno działa. Jak macie lepsze rozwiązania to chętnie posłucham.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
5k7
post
Post #2





Grupa: Zarejestrowani
Postów: 65
Pomógł: 2
Dołączył: 5.12.2006

Ostrzeżenie: (0%)
-----


Ja na twoim miejscu zrobiłbym relacje w samej bazie a zenda do tego bym nie pchał bo więcej się przy tym napocisz niż to warte. Na bazę poświecisz chwile, na te powiązania dużo więcej. Poza tym wydaje mi się że dużo wydajniejsze są relacje w bazie.
Go to the top of the page
+Quote Post

Posty w temacie
- Fluke   [Zend] Relacje   11.10.2011, 21:50:49
- - 5k7   Ja na twoim miejscu zrobiłbym relacje w samej bazi...   14.10.2011, 12:12:41
- - Ges   http://framework.zend.com/manual/en/zend.d...ation...   14.10.2011, 15:01:34


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.12.2025 - 11:34