CakePHP,特别选择

时间:2011-08-13 14:08:11

标签: php sql cakephp-1.3

我会直言不讳,我需要从这个特殊的选择中构建模型列表:

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 个答案:

答案 0 :(得分:1)

是的,您可以将自己的方法添加到将执行您编写的查询的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
    );
  }

}