2012-01-02 45 views
0

我已經爲此搜索了一些東西,但問題的一部分是我不確定如何簡明地描述我的問題。我在這裏有兩個相關的模型:應用程序和缺席。應用程序屬於缺席,缺席有許多應用程序。這是應用程序的模式:CakePHP消除分頁的空結果

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。您可以看到我的一個嘗試去除代碼中註釋掉的「NOT」行中的空應用程序結果。

謝謝!

回答

0

你所面對的正常行爲中容納。

你在做什麼是retreiving 全部缺席,並加入申請如果Application.user_id = $ viewer_id。您沒有返回只有與您的用戶有關的缺席。

獲得您想要的最簡單方法是從應用程序的角度提取數據並加入Absence模型。

在applications_controller.php

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

我可以在使用這個在absences_controller.php(更適合我的應用程序)。萬分感謝! – Jay 2012-01-03 19:17:02

0

嘗試:

$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 2012-01-02 23:02:59

0

試試這個..

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

這看起來好像讓我得到了和以前一樣的結果。 – Jay 2012-01-02 23:07:31

+0

試試這個...... $ this-> paginate = array('Absence'=> array('conditions'=>'Application.user_id'=> $ viewer_id)); – Mo3z 2012-01-02 23:22:56

+0

這會得到一個SQL錯誤。查詢在WHERE子句中有Application.user_id,但它不加入應用程序表。 – Jay 2012-01-03 01:16:01