admin

CakePHP查找涉及两个模型的SQL查询的语句

sql

我是蛋糕新手,并且正在练习类似Twitter的克隆游戏。此时,我有3个表:

users (id, name)

  • id是自动生成的id
  • 用户名

tweets (id, content, user_id)

  • id是自动生成的id
  • 内容是推文的文字
  • user_id是发布该帖子的用户的ID

followers (id, follower_id, following_id)

  • id是自动生成的id
  • follower_id是正在执行以下操作的用户
  • following_id是被关注的用户

因此,作为sql的新手,我尝试使用以下语句针对我的数据库测试一些sql查询:

SELECT * FROM tweets 
WHERE user_id IN
(SELECT following_id FROM followers WHERE follower_id = 1)  <--- this 1 is just a magic number to test out the query

在此查询中,我试图查找用户(id为1)所关注的那些用户的所有tweet。

我的问题有两个方面。为了我的一生,我找不到如何在蛋糕中进行等效查找查询的方法。其次,我的sql查询涉及查看两个表,因此实际上是在两个cakephp模型上。我不确定如何从一个控制器使用两个模型来构造此查找查询。


阅读 209

收藏
2021-07-01

共1个答案

admin

$conditionsSubQuery['`followers`.`follower_id `'] = 1;
$dbo = $this->Follower->getDataSource();

$subQuery = $dbo->buildStatement(    
    array(        
        'fields' => array('`followers`.`following_id`'),
            'table' => $dbo->fullTableName($this->Follower), 
           'alias' => 'followers', 
           'limit' => null,  
          'offset' => null, 
           'joins' => array(),  
          'conditions' => $conditionsSubQuery,
            'order' => null,  
          'group' => null    ),

        $this->Follower);



    $subQuery = ' `tweets`.`user_id` IN (' . $subQuery . ') ';

    $subQueryExpression = $dbo->expression($subQuery);

   $conditions[] = $subQueryExpression;

   $this->Tweet->find('all', compact('conditions'));
2021-07-01