0

私はこれらの関係を持っています:

出席は従業員に属します

スケジュールは従業員のものです

このfind()は、日付範囲内のすべての出席レコードを取得するために問題なく機能します。

    $data = $this->Attendance->find('all', array(
        'contain' => array(
            'Employee' => array(
                'Schedule' => array(
                    'conditions' => array('sche_status' => 1),
                    'order' => 'sche_valid DESC',
                    'limit' => 1
            ))
        ),
        'conditions' => $conditions,
        'order' => array('employee_id', 'att_date')
            )
    );

ただし、このスケジュール条件

'conditions' => array('sche_status' => 1),

「現在の」スケジュールを取得します。問題は、従業員が日付範囲に複数のスケジュールを持っている場合です。親の出席レコードに関連するスケジュールを取得するには、Attendance.att_dateも条件付けする必要があります。

試してみました

'conditions' => array('sche_status' => 1, 'ho_valid <=' => Attendance.att_date)

'conditions' => array('sche_status' => 1, 'ho_valid <=' => $this->Attendance.att_date)

contanスケジュール条件からAttendance.att_dateを参照するにはどうすればよいですか?それは可能ですか?私の現在のデータセットはかなりきれいで、find()は乾燥しているので、ここで混乱させたくありません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

を使用するcontain()と、個々のクエリが実行されます。あなたの例では、実際には3つのクエリを個別に実行し、CakePHPによって結合されて返されたデータ配列になります。

したがって、別のモデルのフィールドを使用して、含まれているモデルを条件付けすることはできません。

あなたの最善の策は、最初にフィールドをクエリしてから、この検索で​​その値を使用するか、joins()を使用して、3 つの個別のクエリではなく単一のクエリからすべての結果を返すことです。

サイドノート-このクエリをコントローラーで作成しているようです-MVC構造に従って、コントローラーではなくモデルにすべてのクエリを保持することをお勧めします-次に、find()コントローラーからモデルのメソッド( を持つ)を呼び出すだけです結果を取得します。

于 2012-11-30T02:13:57.790 に答える