Как использовать один контроллер для более чем одного SQL-запроса в Cakephp? - PullRequest
1 голос
/ 07 июля 2010

У меня серьезный тупик в отношении моего проекта.Я ищу решение в течение нескольких дней, но там ничего нет.

На моей странице индекса есть 4 разных запроса mysql.Я попытался закодировать это сначала в 1 контроллере и 1 представлении.Это был не правильный путь.Тогда кто-то предложил использовать 4 элемента с функцией requestAction ().Сначала было очень хорошо.Тогда мне нужно было 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 Ответ

1 голос
/ 07 июля 2010

Каждый раз, когда мне нужно несколько запросов в одном контроллере, я делаю так:

// 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());
}
...