findManyToManyRowset con Zend_Db_Table_Select
-
05-07-2019 - |
Domanda
Sto cercando di usare un oggetto select per filtrare i risultati di un set di righe da molti a molti. Questa chiamata funziona alla grande:
$articles = $this->model->findArticlesViaArticlesUsers();
Questo tuttavia non:
$articles = new Default_Model_Articles();
$articleSelect = $articles->select();
$articleSelect->where("status = 'published'")
->order("date_published DESC")
->limit(1);
$articles = $this->model->findArticlesViaArticlesUsers($articleSelect);
Questo genera il seguente errore:
eccezione "Zend_Db_Select_Exception" con messaggio "Non è possibile definire a nome di correlazione "i" più di una volta "
Non riesco a capire come ottenere correttamente " articoli che hanno lo stato di "pubblicato" " usando la magica relazione molti-a-molti (né findManyToManyRowset
). Sono alla fine della mia corda e sto pensando di scrivere semplicemente sql manualmente. Qualche idea?
Soluzione
Quando si definisce l'istruzione select, è necessario utilizzare lo stesso oggetto su cui si chiama findManyToManyRowset (o qualsiasi altra funzione magica in uso).
Esempio:
$articles = new Default_Model_Articles();
$user = $articles->find($userId)->current();
$select = $user->select();
$select->where('status = ?', 'published');
$articles = $user->findArticlesViaArticlesUsers($select);
Nota l'istruzione select e findArticlesViaArticlesUsers stanno entrambi estendendo $ user. Questa è la chiave.
Altri suggerimenti
Penso che tu abbia capito male come funzionano le relazioni.
Vedi questa pagina di manuale - dovresti chiamare il metodo magico, findArticlesViaArticlesUsers, su un oggetto Row. In questo caso, penso che tu voglia trovare un utente e quindi chiamare findArticles ... su questo.