我只想在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文件要编写更多代码?什么地方出了错 ??
泰
答案 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());
}