1

我只想在 index.ctp 上显示一个模型的所有结果,这些结果都作为条件成立。像这样选择:

select * from revistas where 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 文件可以编写更多代码?什么地方出了错 ??

4

3 回答 3

3

TLDR:

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

解释:

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

相反,应用这样的条件:

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

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

于 2013-03-12T21:24:41.440 回答
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
}
于 2013-03-13T14:06:41.210 回答
-1

试试这个:

public function index() {

        $this->Revista->find('all', array(
                'conditions' => array('Revista.isonline' => 't')));
        $this->Revista->recursive = 0;
        $this->set('revistas', $this->paginate());
    }
于 2013-03-12T20:55:39.890 回答