cakephp限制结果查找('全部')

时间:2013-03-12 20:53:17

标签: cakephp controller find

我只想在index.ctp上显示来自模型的所有结果,这些结果都是条件。像这样选择:

从revistas中选择*,其中isonline ='true';

我在控制器上尝试了以下代码:

public function index() {
        //$iscond = $this->Revista->findAllByNome('testa');
        //$this->Revista->query("SELECT id, nome, acronimo, modified, user_id from xconv.revistas where isonline = 't'");
        $this->Revista->find('all', array(
            'contain' => array( 
                'conditions' => array('Revista.isonline' => 't'))));
        $this->Revista->recursive = 0;
        $this->set('revistas', $this->paginate());
    }

上述2条评论尝试了b4。它没有返回任何错误,但不做这个条件。

是否有其他MVC文件要编写更多代码?什么地方出了错 ??

3 个答案:

答案 0 :(得分:3)

<强> TLDR:

您需要为实际分页提供条件,而不是执行find()查询,然后执行完全独立的$this->paginate()

<强>解释

$this->paginate();实际上会为您运行查询。所以 - 基本上,在您的问题中,您无缘无故地运行查询,然后执行paginate()运行另一个没有条件的查询。

相反,应用这样的条件:

$this->Paginator->settings = array('conditions'=>array('Revista.isonline' => 't'));
$this->paginate();

注意:正如您的评论和其他答案所述,有多种方法可以将条件应用于分页 - 此答案的要点是指出您需要将条件应用于分页,而不是以前的查询。

答案 1 :(得分:0)

在@Dave的回答评论中使用你的线索,我认为这是“分页器过滤器”的解决方案,

public function index() {
    $this->Revista->recursive = 0;  //your old code
    $this->paginate['conditions']=array('Revista.isonline' => 't'); //new code
    $this->set('revistas', $this->paginate());  //your old code
}

答案 2 :(得分:-1)

试试这个:

public function index() {

        $this->Revista->find('all', array(
                'conditions' => array('Revista.isonline' => 't')));
        $this->Revista->recursive = 0;
        $this->set('revistas', $this->paginate());
    }