Есть ли способ найти любимые сообщения пользователя в одном запросе? - PullRequest
0 голосов
/ 02 мая 2011

Я делаю это, чтобы разбить на страницы все сообщения, которые пользователь добавил в избранное:

$favs = $this->Favorite->find('all', array(
   'fields' => array(
       'Favorite.post_id'
   ),
   'conditions' => array(
       'Favorite.user_id' => $this->Auth->user('id')
   )
));

$favs = Set::format($favs, '{0}', array('{n}.Favorite.post_id'));

$posts = $this->paginate('Post', array(
    'Post.id' => $favs
));

Есть ли более эффективный способ сделать это или так должно быть?

Спасибо за любую помощь.

Ответы [ 2 ]

0 голосов
/ 03 мая 2011

Спасибо, ребята, за ваши посты, но вчера я нашел простое решение.Я надеюсь, что это будет полезно для кого-то

$posts = $this->paginate('Post', array(
  'Post.id IN( (SELECT `Favorite` . `post_id` FROM `favorites` AS `Favorite` WHERE `Favorite`.`user_id` = ' . $this->Auth->user('id') . ') )'
));
0 голосов
/ 02 мая 2011

Вам не нужно использовать метод find здесь, потому что paginate работает почти так же, как find, за исключением разбиения на страницы результатов.

Таким образом, вы можете делать то, что хотите, используя только метод paginate.

Я сомневаюсь, что это значительно повысит производительность, но сделает ваш код немного проще.

...