2012-01-02 5 views
0

Я искал эту проблему, но часть проблемы в том, что я не совсем уверен, как кратко описать мою проблему. У меня есть две подходящие модели: Приложение и Отсутствие. Приложение принадлежит к отсутствию, отсутствие hasMany Application. Вот схема для применения:CakePHP устраняя нулевые результаты из разбивки на страницы

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

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

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. Вы можете увидеть одну из моих попыток лишить нулевой результат приложения в зачеркнутой строке «NOT» в коде.

Спасибо!

ответ

0

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

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

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

В applications_controller.php

$this->set('applications', $this->paginate('Application' => array('conditions' => array('Application.user_id' => $viewer_id)))); 
+0

Я смог использовать это в absens_controller.php (лучше работает для моего приложения). Благодаря тонну! – Jay

0

Try:

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

Отсутствие не имеет APPLICATION_ID, так как это может иметь многие из них; единственным внешним ключом является Application.absence_id. – Jay

0

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

$this->paginate = array('Application' => array('conditions' => 'Application.user_id' => $viewer_id)); 
+0

Похоже, что это дает мне тот же результат, что и раньше. – Jay

+0

Попробуйте это. $ this-> paginate = array ('Absence' => array ('conditions' => 'Application.user_id' => $ viewer_id)); – Mo3z

+0

Это получает ошибку SQL. Запрос имеет Application.user_id в предложении WHERE, но он не входит в таблицу приложений. – Jay

Смежные вопросы