Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ZendFramework - Db_Table i relacje wiele-do-wiele
akubiczek
post
Post #1





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


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?
Go to the top of the page
+Quote Post
mwojcik
post
Post #2





Grupa: Zarejestrowani
Postów: 69
Pomógł: 0
Dołączył: 22.07.2007

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


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. ?>
Go to the top of the page
+Quote Post
akubiczek
post
Post #3





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


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.
Go to the top of the page
+Quote Post
NuLL
post
Post #4





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Zend nie ma ORMa z prawdziwego zdarzenia. Caly framework zreszta jest dosc smieszny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Prawdziwy ORM - hmm phpDoctrine, Propel (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
akubiczek
post
Post #5





Grupa: Zarejestrowani
Postów: 189
Pomógł: 0
Dołączył: 4.07.2004
Skąd: z neostrady

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


Cytat(NuLL @ 8.08.2007, 11:40:01 ) *
Zend nie ma ORMa z prawdziwego zdarzenia. Caly framework zreszta jest dosc smieszny (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Prawdziwy ORM - hmm phpDoctrine, Propel (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

No to ja wiem (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Napisałem "tego ich ORMa" (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Ale może masz pomysł jak rozwiązać mój problem?
Go to the top of the page
+Quote Post
NuLL
post
Post #6





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Skorzystac z czego innego (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Sorki za dosadnosc ale nie znosze ZF.

Ten post edytował NuLL 8.08.2007, 10:46:45
Go to the top of the page
+Quote Post

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: 14.09.2025 - 19:18