CakePHP-HABTM查询

CakePHP-HABTM查询,cakephp,Cakephp,CakePHP以什么方式进行此类查询 SELECT news.* FROM news, users INNER JOIN news_users nu ON nu.user_id = users.id WHERE users.id = $user_id 我有一个链接表news\u users,因此尝试使用类似$news=$this->news->findByUserId($this->User->id)的东西不起作用,因为它查找新闻。用户id 另外,上面的查询有效,我只想缩短脚本。您可以在新

CakePHP以什么方式进行此类查询

SELECT news.* FROM news, users 
INNER JOIN news_users nu ON nu.user_id = users.id 
WHERE users.id = $user_id
我有一个链接表
news\u users
,因此尝试使用类似
$news=$this->news->findByUserId($this->User->id)的东西不起作用,因为它查找
新闻。用户id


另外,上面的查询有效,我只想缩短脚本。

您可以在新闻模型中声明findByUserId函数:

//put this code in your News model
public function findByUserId($user_id = null)
{
    return $this->find('all', array(
        'conditions' => array(
            'NewsUser.user_id' => $user_id
        ),
        'joins' => array(
            array(
                'table' => 'news_users',
                'alias' => 'NewsUser',
                'type' => 'INNER',
                'conditions' => array(
                    'NewsUser.news_id = News.id'
                )
            )
        )
    ));
}
然后,您可以在新闻控制器中的任何位置使用findByUserId函数

//this code in NewsController
$news = $this->News->findByUserId($this->User->id);

这似乎并不容易:|在模型中使用
finderQuery
不可能吗?@Ráplipandrás,可能即使可以,也不会是更容易的解决方案。我改变了我的答案,使它更容易在控制器中使用。谢谢。我很快就会试试。