CakePHP, специальный выбор - PullRequest
       3

CakePHP, специальный выбор

0 голосов
/ 13 августа 2011

Я буду тупым, мне нужно построить список моделей из этого специального выбора:

SELECT * FROM posts p WHERE p.user_id IN
    (SELECT u.id FROM users u, following f
        WHERE u.id = f.followee_id AND f.follower_id = $id)
    ORDERED BY p.created
    LIMIT $limit;

Можно ли поместить это как функцию в модель?Я совершенно новичок в CakePHP, должен признать.

Я не могу использовать функции find здесь, потому что тогда сообщения не будут должным образом "смешаны".

1 Ответ

1 голос
/ 13 августа 2011

Да, вы можете добавить свой собственный метод в класс Model, который будет выполнять запрос, который вы пишете. Но не забывайте очищать ввод (это не делается автоматически при написании собственных запросов) и добавлять префиксы таблиц.

App::import('Sanitize');    

class YourModel extends AppModel {

  public function specialSelect($id, $limit) {
    $id = Sanitize::paranoid($id); // or use (int) to convert it to integer
    $limit = Sanitize::paranoid($limit);

    return $this->query(
      'SELECT * FROM '.$this->tablePrefix.'posts p WHERE p.user_id IN '.
      '(SELECT u.id FROM '.$this->tablePrefix.'.users u, '.$this->tablePrefix.'.following f '.
         'WHERE u.id = f.followee_id AND f.follower_id = '.$id.') '.
      'ORDER BY p.created LIMIT '.$limit
    );
  }

} 
...