Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ZendFramework - Db_Table i relacje wiele-do-wiele
Forum PHP.pl > Forum > PHP
akubiczek
Panowie pomocy,

Na szybko (może za szybko) zapoznaję się z ZF i utknąłem na banalnym wydawałoby się problemie. Połączenia pomiędzy tabelą items i categories przechowuję w osobnej tabeli items_categories (typowa relacja wiele-do-wiele). Tylko jak teraz zaimplementować wybieranie elementów z items, wg wskazanej kategorii?

  1. <?php
  2. class Items extends Zend_Db_Table_Abstract {
  3.  
  4. protected $_referenceMap = array(
  5. 'Items_Categories' => array(
  6. 'columns'  => array('id'),
  7. 'refTableClass'  => 'Items_Categories',
  8. 'refColumns' => array('itemid')
  9. ),
  10. );
  11.  
  12. public function findByCategory($categoryId) {
  13. //haha, no właśnie jak to zaimplementować?
  14. }
  15. }
  16. ?>


Owszem, widzę w dokumentacji ZF jak obsługiwać tego typu relacje, ale prezentowane tam rozwiązanie wymaga otrzymania wpierw obiektu Zend_Db_Table_Row. Ale po co, ja chcę tylko aby ZF wygenerował takie zapytanie:

  1. SELECT * FROM items INNER JOIN items_categories ON items.id=items_categories.itemid WHERE items_categories.categoryid=?


Da się to w ogóle osiągnąć? Jak?
mwojcik
Inner Join zamisast skladni
  1. SELECT * FROM Table1 INNER JOIN Table2 ON Table1.id=Table2.id

mozna zapisac za pomoca
  1. SELECT * FROM Table1, Table2 WHERE Table1.id=Table2.id


Z tego co pamietam, piszac jeszcze w ZF (nie wiem jak to jest w wersji 1.0, bo ostatnio pisalem bodajze w 0.6), mozesz zapisac to normalnie jako "where"
  1. <?php
  2. $sql->from(array('Table1', 'Table2'), '*'); 
  3. $sql->where('Table1.id = Table2.id');
  4. ?>

chociaz takie cos powinno tez ci zadzialac
  1. <?php
  2. $sql->from('Table1', '*');
  3. $sql->join('Table2', 'Table1.id = Table2.id');
  4. ?>

A czy takze nie mozesz zrobic prostego zapytania za pomoca "query" ?
  1. <?php
  2. $sql->query("SELECT * FROM Table1 INNER JOIN Table2 ON Table1.id=Table2.id");
  3. ?>
akubiczek
Tak, tak, tylko że mi się rozchodzi o to, aby użyć w tym celu tego tego ich ORMa (Zend_Db_Table). Tworząc zapytanie ręcznie, czy też "półręcznie" oczywiście nie ma z tym żadnego problemu.
NuLL
Zend nie ma ORMa z prawdziwego zdarzenia. Caly framework zreszta jest dosc smieszny smile.gif Prawdziwy ORM - hmm phpDoctrine, Propel smile.gif
akubiczek
Cytat(NuLL @ 8.08.2007, 11:40:01 ) *
Zend nie ma ORMa z prawdziwego zdarzenia. Caly framework zreszta jest dosc smieszny smile.gif Prawdziwy ORM - hmm phpDoctrine, Propel smile.gif

No to ja wiem winksmiley.jpg Napisałem "tego ich ORMa" tongue.gif

Ale może masz pomysł jak rozwiązać mój problem?
NuLL
Skorzystac z czego innego winksmiley.jpg Sorki za dosadnosc ale nie znosze ZF.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.