2016-03-19 6 views
0

私は3つのテーブルのプロジェクト、タスク、タグを持っています。 Projects.idは最初のテーブルの主キー、Tasks.idは2番目のテーブルのPK、Tags.idは3番目のテーブルのPKです。ケーキphpは、一致するデータでなくてもjoinを返します。それを修正するには?

プロジェクトモデルコードは

public $primaryKey = 'id'; 
public $hasMany = array(
    'Tasks' => array('className' => 'Tasks','foreignKey' => 'project_id') 
); 

タスクモデルコードは、いくつかの予期しない結果を返す

public $primaryKey = 'id'; 
public $hasMany = array(
    'Tags' => array('className' => 'Tags','foreignKey' => 'task_id') 
); 

以下のクエリをスニペットスニペット。

$joins = array(
     array('table' => 'project_tasks', 
      'alias' => 'Tasks', 
      'type' => 'inner', 
      'conditions' => array(
       'Projects.id = Tasks.project_id' 
      ) 
     ), 
     array('table' => 'task_tags', 
      'alias' => 'Tags', 
      'type' => 'inner', 
      'conditions' => array(
       'Tasks.id = Tags.task_id', 
       "Tags.tag_name = 'Driver'" 
      ) 
     ) 
    ); 
    $data = $this->Projects->find('all', array(
     'recursive' => 2, 
     'joins' => $joins 
    )); 

私は取得しています応答データは

[Projects] => Array 
       (
        [id] => 1 
        [project_id] => 1234 
        [project_name] => XYZ 
       ) 

      [Tasks] => Array 
       (
        [0] => Array 
         (
          [id] => 1 
          [project_id] => 1 
          [task_id] => 12 
          [task_name] => task1 
          [Tags] => Array 
           (
            [0] => Array 
             (
              [id] => 1 
              [task_id] => 1 
              [tag_id] => 3444 
              [tag_name] => Driver 
             ) 

           ) 

         ) 

        [1] => Array 
         (
          [id] => 2 
          [project_id] => 1 
          [task_id] => 343242 
          [task_name] => task2 


          [Tags] => Array 
           (
            [0] => Array 
             (
              [id] => 2 
              [task_id] => 2 
              [tag_id] => 4444 
              [tag_name] => Doctor 
             ) 
           ) 

         ) 

あるドライバーとして、私もタグなしでタスクを取得しています参照してください。タグドライバなしのタスクをどのように除外できますか?

答えて

0

「フィールド」を選択し、「再帰的」=> -1に設定することで修正できました。

 $data = $this->Projects 
        ->find('all', array(
          'recursive' => -1, 
          'joins' => $joins, 
         'fields' => array(
          'Projects.*', 
          'Tasks.*', 
          'Tags.*' 
         ) 
)); 
関連する問題