与Zend_Db_Table_Select一起使用findManyToManyRowset

时间:2009-09-11 03:49:30

标签: zend-framework many-to-many

我正在尝试使用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'   消息'您无法定义   相关名称“我不止一次”

我无法弄清楚如何使用神奇的多对多关系(也不是findManyToManyRowset)成功获得“具有'已发布'状态的文章”。我已经走到了尽头,想着手动编写sql。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

定义select语句时,必须使用调用findManyToManyRowset(或您使用的任何魔术函数)的相同对象。

例如:

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

注意select语句和findArticlesViaArticlesUsers都在扩展$ user。这是关键。

答案 1 :(得分:0)

我认为你误解了这种关系是如何运作的。

请参阅this manual page - 您应该在Row对象上调用magic方法findArticlesViaArticlesUsers。在这种情况下,我认为你想找到一个用户,然后在那上面调用findArticles ....