2016-03-19 8 views
0

Üç tablo Projeler, Görevler ve Etiketler var. Projects.id ilk tablonun birincil anahtarıdır, Tasks.id ikinci tablonun PK'sidir ve Tags.id üçüncü tablonun PK'sidir.kek php ile birleştirme tüm eşleşmeleri bile eşleşen olmayan eşleşir. Nasıl düzeltilir?

Projeler Model Kodu

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

Görevler Model Kodu bazı beklenmedik sonuç döndürmek

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

Aşağıdaki sorgu pasajı pasajı.

$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 
    )); 

i alıyorum tepki verileri

[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 
             ) 
           ) 

         ) 

i bile Sürücü olarak etiketi olmadan görevleri alıyorum bakın olduğunu. Sürücü etiketi olmadan görevleri nasıl hariç tutabilirim?

cevap

0

Seçmek için 'alanları' belirterek ve 'tekrarlı' => -1 değerini aşağıdaki gibi belirleyerek düzeltmeyi başarabildim.

 $data = $this->Projects 
        ->find('all', array(
          'recursive' => -1, 
          'joins' => $joins, 
         'fields' => array(
          'Projects.*', 
          'Tasks.*', 
          'Tags.*' 
         ) 
)); 
İlgili konular