2017-07-28 45 views
1

我是cakephp的新手。我正在使用查詢構建器從cakephp查詢構建器中使用連接從兩個表中獲取詳細信息。但是,我正在編寫的查詢僅從一個表中獲取細節。需要幫助以從其他表中獲取數據。加入查詢僅從一張表中檢索數據cakephp 3

這是我的代碼通過連接兩個表來獲取數據:

public function edit($id = null) { 

    $events_table = TableRegistry::get('Events'); 

    $events = $events_table->find('all') 
      ->hydrate(false) 
      ->join([ 
      'CourseType'=> [ 
         'table'  => 'coursetype', 
         'type'  => 'LEFT', 
         'conditions' => 'Events.type = CourseType.coursetype_id', 
        ]     
      ])->where(['Events.id' => $id]); 

    $event = $events->toArray();  
    $this->set('event', $event); 
} 

結果我從事件表中只獲得詳細信息。但我需要從coursetype也數據。任何幫助表示讚賞。謝謝。

+0

試試這個https://stackoverflow.com/a/845519/4514250。可能是有幫助的。 –

+0

這是cakephp 3.x還是cakephp 2.x? –

回答

1

手動添加連接,不會造成被選擇的任何其他數據,你必須通過指定通過select()方法選擇的字段做你自己。

$events = $events_table 
    ->find('all') 
    ->hydrate(false) 
    ->select($events_table) 
    // either add the fields one by one, or pass a table object 
    // as above to select all fields of the table 
    ->select(['CourseType.id', 'CourseType.xyz', /* ... */]) 
    // ... 

我建議用使用安全殼代替,即設置所需的協會,如果不存在,然後簡單地使用contain()

$events = $events_table 
    ->find('all') 
    ->hydrate(false) 
    ->contain('CourseType') 
    ->where(['Events.id' => $id]); 

又見

+0

是'CourseType'型號名稱? –

+0

這取決於您的設置,我只是使用了與您的示例中相同的別名。如果您要遵循CakePHP的[**命名約定**](https://book.cakephp.org/3.0/en/intro/conventions.html#model-and-database-conventions),那麼「模型「(表類)名稱將是'Coursetype',如果您也要遵循數據庫表名稱的召集,那麼這將是'course_types',而模型名稱將是'CourseTypes'。 @VaruniNR – ndm

+0

好的,謝謝。將試用 –