findManyToManyRowset с Zend_Db_Table_Select - PullRequest
       15

findManyToManyRowset с Zend_Db_Table_Select

1 голос
/ 11 сентября 2009

Я пытаюсь использовать объект select для фильтрации результатов множества строк во множестве. Этот звонок прекрасно работает:

$articles = $this->model->findArticlesViaArticlesUsers();

Однако это не так:

$articles = new Default_Model_Articles();
$articleSelect = $articles->select();
$articleSelect->where("status = 'published'")
              ->order("date_published DESC")
              ->limit(1);

$articles = $this->model->findArticlesViaArticlesUsers($articleSelect);

Это приводит к следующей ошибке:

исключение 'Zend_Db_Select_Exception' с сообщением «Вы не можете определить имя корреляции 'i' более одного раза '

Я не могу понять, как успешно получать «статьи, имеющие статус« опубликованные »», используя магическое отношение «многие ко многим» (ни findManyToManyRowset). Я в конце своей веревки и думаю просто написать SQL вручную. Есть идеи?

Ответы [ 2 ]

1 голос
/ 19 марта 2011

При определении оператора select вы должны использовать тот же объект, который вызываете findManyToManyRowset (или любую волшебную функцию, которую вы используете).

Ex:

$articles = new Default_Model_Articles();
$user = $articles->find($userId)->current();
$select = $user->select();
$select->where('status = ?', 'published');
$articles = $user->findArticlesViaArticlesUsers($select);

Обратите внимание, что оператор SELECT и findArticlesViaArticlesUsers расширяют $ user. Вот ключ.

0 голосов
/ 11 сентября 2009

Я думаю, вы неправильно поняли, как работают отношения.

См. эту страницу руководства - вам следует вызвать магический метод findArticlesViaArticlesUsers для объекта Row. В этом случае, я думаю, вы хотите найти пользователя, а затем вызвать findArticles ... на этом.

...