2013-03-12 66 views
1

我只是想在index.ctp上显示模型中的所有结果都是真实的条件。像这样选择:cakephp极限结果find('all')

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写更多的代码?什么地方出了错 ??

回答

3

TLDR:

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

说明:

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

相反,应用这样的条件:

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

注:正如您的评论和另一个答案指出,有多种方式可以适用条件进行分页 - 主要指向这个答案指向你需要将条件应用到分页,而不是以前的查询。

+0

戴夫,TY的帮助...它把我放在正确的方向来解决这个特定的问题,但解决的办法发生时,我在控制器上写了: \t公共$ PAGINATE =阵列( \t \t“限制” = > 30, \t \t'conditions'=> array('Revista.isonline'=>'t') \t \t); – 2013-03-13 13:40:58

+0

我想为此投票。 – 2013-03-13 13:45:38

+0

@josemey - 是的,这是将条件应用于分页的另一种方式。唯一的缺点是,它将它应用于该控制器中的所有分页,而不仅仅是特定的操作。 – Dave 2013-03-13 14:04:22

-1

试试这个:

public function index() { 

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

喜,TY的帮助,但我想这B4使用类型“包含” 。相同的结果。 – 2013-03-13 13:13:17

0

使用您的线索,在@戴夫的回答意见,我认为这是与“分页程序过滤器”的解决方案,

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 
}