2012-01-02 6 views
0

私はこれを取り上げましたが、問題の一部は私の問題を簡潔に記述する方法が本当にわからないということです。私は2つの関連するモデルをここに持っています:アプリケーションと不在。アプリケーションが属していない、存在しない。アプリケーションのスキーマは次のとおりです。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を維持したいと思います。あなたは、nullアプリケーションの結果をコード内のコメントアウトされた「NOT」行に取り除こうとする試みを見ることができます。

ありがとうございます!

答えて

0

あなたは、通常の収容可能の行動に直面しています。

あなたがやっていることは、退会することですすべて不在で、Application.user_id = $ viewer_idの場合はアプリケーションに参加してください。 のみあなたのユーザーに関連した不在が返されていません。

あなたが望むものを得る最も簡単な方法は、アプリケーションの観点からデータを回収し、休止モデルに参加させることです。 applications_controller.php

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

私はabsences_controller.phpでこれを使用することができました(私のアプリでうまくいく)。ありがとう、トン! – Jay

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

0

はこれを試してみてください。..

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

これは以前と同じ結果を得ているようです。 – Jay

+0

これを試してみてください。 $ this-> paginate = array( '不在' =>配列( '条件' => 'Application.user_id' => $ viewer_id)); – Mo3z

+0

これはSQLエラーを取得します。クエリにはWHERE句にApplication.user_idが含まれていますが、Applicationテーブルには参加しません。 – Jay

関連する問題