使用CakePHP 2.4中的相关字段查找数据

时间:2014-06-17 02:28:31

标签: php sql cakephp cakephp-2.4

我试图在我的CakePHP 2.4应用程序中获取一个用户列表,这些用户已经为特定项目提供了帖子(想想'类别')。我的数据如下:

项目 hasMany 发布

用户 hasMany 发布

发布属于项目用户

我尝试在我的项目view方法中进行查找以获取贡献者列表:

    $this->loadModel('User');
    $this->loadModel('Post');
    $this->set('contributors', $this->Project->Post->User->find('list', array(
        'conditions' => array('Post.project_id' => $id)
    )));

理想情况下,这应该会为我提供一个用户列表,这些用户创建了project_id等于$ id的帖子。但是,我收到错误:Error: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Post.project_id' in 'where clause'

显然,ORM并没有理解我的代码:我不知道project_id到底是什么意思。是否可以通过搜索相关模型中的字段来获取用户列表?或者这超出了CakePHP对象系统的能力?

这是我在SQL中尝试做的事情的近似值。我仍然不想裸露SQL,因为所有消息来源都告诉我这是一个糟糕的想法。 如何在Cake find中构建类似的查询?

SELECT 
    users.* 
FROM 
    users 
WHERE 
    EXISTS (
        SELECT 
            * 
        FROM 
            posts
        WHERE 
            users.id = posts.user_id 
            AND 
            posts.project_id = " . $id . "
    )

2 个答案:

答案 0 :(得分:0)

我找到了一个使用Cake的解决方案:这个代码成功地列出了所有Users已创建Posts的{​​{1}}我正在寻找的人。

project_id

答案 1 :(得分:-1)

$user=$this->Post->find('all', array(
        'conditions' => array('Post.project_id' => $id)));

$this->set('contributors', 'user');

然后您可以使用debug($user); exit;查看您将收到的结果