2017-02-21 92 views
1

Можно ли получить столбцы таблиц, которые являются двумя или более удаленными таблицами, используя select()?CakePhp3 select() в запросе более одного уровня

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

... это работает, но возвращает ervery столбец из трех таблиц

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

... это ничего не возвращает, Althought сгенерированный оператор выбора кажется правильным

+1

Каковы взаимоотношения между таблицами? – drmonkeyninja

+1

Я думаю, что вы уложили меня в проблему ... кажется, что выбор работает только на ** N: 1 ** ... в моем примере ... если ** Номера ** принадлежат для ** Уровней ** и ** Уровни ** относятся к ** Здания **, это сработает. В случае ** N: M ** или ** 1: N ** i не может использовать ** select() ** isn'it? –

ответ

2

Вы можете только выберите поля в основном запросе, если вы обрабатываете отношения «один к одному» (т.е.hasOne или belongsTo). Это, по-видимому, ваша проблема. В этом случае вам необходимо указать поля для включения из ваших имеет-многих в самой contain: -

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

Это потому, что CakePHP будет выполнять второй отдельный запрос для извлечения имеет-много связанных модели данных для которые вам нужно указать условия запроса в пределах contain.