如何在Cakephp中为一个以上的SQL查询使用一个控制器?

时间:2010-07-07 09:33:08

标签: cakephp cakephp-1.3

我的项目严重陷入僵局。我正在寻找解决方案,但几乎没有。

我的索引页面有4个不同的mysql查询。我试着在1个控制器和1个视图中首先编写代码。这不是正确的方法。然后有人建议使用带有requestAction()函数的4个元素。起初非常好。然后我需要命令之间的mysql。我找不到与requestAction()一起使用的方法。关于Cakephp集团的问题仍然没有答案。有人建议在控制器中使用动作。但我无法弄清楚如何创建该控制器。

请告诉我你对它的了解。提前谢谢,

这是我当前的帖子控制器的索引函数:

function index() {
        $posts = $this->paginate();
        if (isset($this->params['requested'])) {
            return $posts;
        } else {
            $sql = array( 'conditions' => array( 'id BETWEEN ? AND ?' => array( 286, 291 ) ) );
            $this->Post->find('all', $sql);
            $this->set('posts', $posts);
        }
}

我该怎么办?我应该为休息3动作添加一个新的控制器吗?或者我应该在index()函数中做些什么?

1 个答案:

答案 0 :(得分:1)

每次我在单个控制器中需要多个查询时,我都这样做:

// model Foo
function edit($id){
    $this->data = $this->Foo->read(null, $id);
    $second = $this->Foo->Foo2->find('list');
    $third = $this->Foo->Foo3->find('list');
    $this->set(compact('second', 'third')); 
}

我想,你想在这3列上进行分页,所以上面的例子对此并不好。

我认为你的方法有误。 $posts与您的find无关。应该有$posts = $this->Post->find('all', $sql);。但这不允许你对结果进行分页。请查看手册中的Custom Query Pagination。也许这对你有用:

function index(){
    if(!isset($this->params['requested'])) {
        $this->paginate = array('Post' => array(
            'conditions' => array('id BETWEEN ? AND ?' => array(286, 291))
        ));
    }
    $this->set('posts', $this->paginate());
}