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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top