2017-02-21 18 views
1

select()を使用して2つ以上のテーブルであるテーブルの列を取得することは可能ですか?CakePhp3 select()複数のクエリで

$rooms = TableRegistry::get('Rooms') 
    ->find() 
    ->contain(['Levels.Buildings']) 
    ->toArray(); 

...これは動作しますが、3つのテーブル

$rooms = TableRegistry::get('Rooms') 
    ->find() 
    ->select(['Buildings.name']) 
    ->contain(['Levels.Buildings']) 
    ->toArray(); 

のervery列を返します...生成されたselect文が正しいと思わalthoughtこれは、何も返さない

+1

テーブル間の関係は何ですか? – drmonkeyninja

+1

私はあなたが問題に私を借りていたと思う....それは選択が** N:1 **でしかないと思う...私の例では... **部屋**が属する**レベル** **レベル** belongsTo **建物**、それは動作します。 ** N:M **または** 1:N **の場合** select()** isn'itは使用できません。 –

答えて

2

することができます1対1の関係(、つまりhasOneまたはbelongsTo)を処理する場合は、プライマリクエリのフィールドのみを選択します。これはおそらくあなたの問題です。その場合、あなたはcontain自体であなたの持っている、多くの関係から含めるフィールドを指定する必要があります - CakePHPがために持って、多くの関連するモデルデータを取得するために第2の別のクエリを実行しますので、

$rooms = TableRegistry::get('Rooms') 
    ->find() 
    ->contain([ 
     'Levels' => [ 
      'Buildings' => [ 
       'fields' => 'name' 
      ] 
     ] 
    ]) 
    ->toArray(); 

ですcontain内のクエリ条件を指定する必要があります。

関連する問題