2017-02-21 2 views
1

Ist es möglich, Tabellenspalten zu erhalten, die zwei oder mehr Tabellen mit Hilfe von select()?CakePhp3 select() in Abfrage mehr als eine Ebene

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

... das funktioniert, liefert aber ervery Spalte der drei Tabellen

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

... Das ist nichts zurückgibt, obwohl das erzeugte select-Anweisung scheint

+1

Welche Beziehungen bestehen zwischen den Tabellen? – drmonkeyninja

+1

ich denke du lebst mich auf das problem .... es scheint, dass das select nur bei ** N: 1 ** funktioniert ... in meinem beispiel ... wenn ** rooms ** zu ** levels ** und ** Levels ** gehört zu ** Buildings **, es würde funktionieren. Im Falle von ** N: M ** oder ** 1: N ** kann ich nicht ** wählen() ** isn'it? –

Antwort

2

korrekt zu sein, können Sie Wählen Sie nur Felder in der primären Abfrage aus, wenn Sie eine Eins-zu-Eins-Beziehung bearbeiten (dhhasOne oder belongsTo). Dies ist vermutlich dein Problem. In diesem Fall müssen Sie die Felder angeben, aus Ihrem hat-viele-Beziehung in der contain selbst gehören: -

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

Dies liegt daran, CakePHP eine zweite separate Abfrage durchführen wird, die hat-viele zugehörigen Modelldaten für abrufen Sie müssen die Abfragebedingungen innerhalb der contain angeben.

Verwandte Themen