【问题标题】:Finding data using a related field in CakePHP 2.4在 CakePHP 2.4 中使用相关字段查找数据
【发布时间】:2014-06-17 02:28:30
【问题描述】:

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

项目有很多帖子

用户有很多帖子

帖子属于项目用户

我正在尝试在我的项目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 查找中构建类似的查询?

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

【问题讨论】:

    标签: php sql cakephp cakephp-2.4


    【解决方案1】:

    我找到了一个使用 Cake 的解决方案来解决问题:此代码成功列出了所有 Users 创建了 Posts 并拥有我正在寻找的 project_idPosts

    $contributors = array(
            'joins' => array(
                array(
                    'table' => 'posts',
                    'alias' => 'Post',
                    'type' => 'inner',
    
                    'conditions' => array(
                        'User.id = Post.user_id',
                        'Post.project_id' => $id,
                    ),
                ),
            ),
            'fields' => array('User.*'),
            'group' => array('User.id'),
            'contain' => array()
        );
    
        $this->set('contributors', $this->User->find('all', $contributors));
    

    【讨论】:

      【解决方案2】:
      $user=$this->Post->find('all', array(
              'conditions' => array('Post.project_id' => $id)));
      
      $this->set('contributors', 'user');
      

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

      【讨论】:

      • 这给出了属于该项目的帖子列表。我正在尝试列出创建了属于该项目的帖子的用户列表。
      • 您的回答没有回答问题。你能更新或删除它吗?
      • 请根据 OP 的要求编辑您的答案
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多