2017-05-27 10 views
0

私は、顧客のコンピュータからのレポートを保持し、失敗をリストに表示するシステムを開発しています。私は、現在失敗している、または過去に失敗したシステムをすべて検索するクエリを作成しようとしています。CakePHPクエリ - 条件付きコンテナフィールド

Computersのマイモデルには、last_report_passというフィールドがあり、現在の日に失敗したコンピュータをすばやく見つけることができます。私のReportsは、コンピュータIDに関連付けられていて、合格か失敗かを示すstatusというフィールドがあります。

0であるか、失敗したクエリを作成しようとしています。見つかって結合された(以前の失敗があった)というレポートがある場合に表示します。私はここから何をするか分からない

$computers = $this->Computers->find('all', [ 
    'conditions' => [ 
     'last_report_pass' => '0', 
     'COUNT(Reports) NOT' => '0' 
    ], 
    'contain' => [ 
     'Reports' => [ 
      'conditions' => [ 
       'status' => '0' 
      ] 
     ] 
); 

:ここ

は私のアイデアでした。私はおそらくこれをSQLで書くことができますが、CakeのORM Query Builderに固執しようとしています。前もって感謝します!

+0

あまりにもおそらく。 –

答えて

0

あなたが含まれていることがmatching その類似したを使用する必要がありますが、それは、関連するデータによってフィルタリングされます:あなたも持っていることに気づき、この

$query->distinct(['Computers.id']) 
    ->matching('Reports', function ($q) { 
     return $q->where(['Reports.last_report_pass' => 0]); 
    }); 

その重要のようになります

このテーブルにあるデータを表示する必要がある場合は、containReportsテーブルに移動します。私はおそらく...それは簡単に、最も単純な答えになるだろうし、あなたが他の方法で便利になりたコンピュータのテーブルにレポートの数を格納しますこれらをカウントするカウンタのキャッシュを使用すると思い

Reference

+0

私はマッチングを使ってみましたが、マッチしたレポートごとにコンピュータを複製しました。これを行う方法はありますか?last_report_pass 0のレポートは、通常の内容を含むようにサブ配列に含まれていますか? –

+0

元の投稿を編集し、distinct節を追加しました。 – diego182