2017-07-28 20 views
1

私はcakephpを初めて使用しています。私は、2つのテーブルからの詳細をフェッチするためにusignクエリビルダーですcakephpクエリbuilder.Butで結合を使用して私が書いているクエリは、1つのテーブルから詳細をフェッチしています。他のテーブルからもデータを取得するのに役立つ必要があります。私はイベント表からのみの詳細を取得していますその結果1つのテーブルからデータを取得するクエリにjoinする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); 
} 

これには2つのテーブルを結合することにより、データをフェッチするために私のコードです。しかし、私はまた、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

ありがとうございました。それを試してみる –

-3

ソリューション:CakePHP find method with JOIN

+0

私はそれがcakephp 2.xのためだと思います。 cakephp 3.xの回答を送ることができますか? –

関連する問題