CakePHP оператор поиска для SQL-запроса, включающего две модели - PullRequest
1 голос
/ 04 октября 2011

Я новичок в торте и тренируюсь с клоном, похожим на твиттер. На данный момент у меня есть 3 таблицы:

users (id, name)

  • id - это автоматически сгенерированный идентификатор
  • имя пользователя

tweets (id, content, user_id)

  • id - это автоматически сгенерированный идентификатор
  • содержание - это текст твита
  • user_id - это идентификатор пользователя, который сделал сообщение

followers (id, follower_id, following_id)

  • id - это автоматически сгенерированный идентификатор
  • follower_id - это пользователь, который делает следующее
  • follow_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

В этом запросе я пытаюсь найти все твиты тех пользователей, за которыми следует пользователь (с идентификатором 1)

У меня вопрос двоякий. Что касается меня, я не могу найти, как сделать эквивалентный запрос поиска в торте. Во-вторых, мой sql-запрос включает просмотр двух таблиц, в сущности, двух моделей CakePHP. Я не уверен, как использовать две модели из одного контроллера для построения этого запроса поиска.

1 Ответ

0 голосов
/ 04 октября 2011
$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'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...