CakePHP устраняет нулевые результаты из нумерации страниц - PullRequest
0 голосов
/ 02 января 2012

Я гуглил по этому поводу, но отчасти проблема в том, что я не совсем уверен, как кратко описать мою проблему.У меня есть две соответствующие модели: приложение и отсутствие.Приложение принадлежит отсутствию, отсутствие имеет много приложений.Вот схема для приложения:

CREATE TABLE applications (
    id int unsigned AUTO_INCREMENT PRIMARY KEY,
    user_id int unsigned,
    absence_id int unsigned
);

Это довольно просто.Я хочу разбить на страницы все отсутствия с помощью приложения от конкретного пользователя (я делаю это в контроллере отсутствий).Я могу приблизиться к этому коду:

absences_controller.php:

$this->paginate = array(
    'contain' => array(
        'Application' => array(
            'conditions' => array(
                'Application.user_id' => $viewer_id,
                //'NOT' => array('Application.id' => null),
            )
        ),
    )
);
$this->set('absences', $this->paginate());

Это возвращает отсутствующие элементы, которые я хочу, но также возвращает все отсутствующие элементы, с которыми не связано приложение.Есть ли способ сделать это без пользовательских запросов?Я хотел бы сохранить мое приложение Cakey.Вы можете увидеть одну из моих попыток убрать нулевое значение Application в закомментированной строке «НЕ» в коде.

Спасибо!

Ответы [ 3 ]

0 голосов
/ 03 января 2012

Попробуйте это ..

$this->paginate = array('Application' => array('conditions' => 'Application.user_id' => $viewer_id));
0 голосов
/ 03 января 2012

Вы сталкиваетесь с нормальным поведением Containable.

То, что вы делаете, это получение всех отсутствия и присоединение к приложению, если Application.user_id = $ viewer_id.Вы не возвращаете только отсутствий, связанных с вашим пользователем.

Самый простой способ получить то, что вам нужно, - это получить данные с точки зрения приложения и присоединиться к модели отсутствия.*

In application_controller.php

 $this->set('applications', $this->paginate('Application' => array('conditions' => array('Application.user_id' => $viewer_id))));
0 голосов
/ 03 января 2012

Попробуйте:

$this->paginate = array(
    'conditions' => array(
        'Absence.application_id >' => 0
    ),
    'contain' => array(
        'Application' => array(
            'conditions' => array(
                'Application.user_id' => $viewer_id
            )
        ),
    )
)
...