2015-06-22 1 views
0

В CakePHP 3 ORM изменился, и я не могу найти правильный способ выбора необходимых данных из базы данных.Лучшие правила для получения данных с Contain

В CakePHP 2, я использую contain('User.name','User.id'), но в CakePHP 3 этот код не работает.

Так как я могу выбрать только id и name от пользователя?

Код:

$query = $data->find()->contain(['Users'])->execute()->fetchAll('assoc'); 
// I want only user.id and user.name. 

ответ

1
$articles = $this->Model->find() 
     ->select(['fields_you_want_from_this_Model']) 
     ->contain(['Assoc_Model' => function($q) { 
      return $q 
       ->select(['fields_you_want_from_the_associated_model']); 
     }]); 
1

U осмотрит об этой странице: http://book.cakephp.org/3.0/en/orm/query-builder.html#passing-conditions-to-contain

В конкретном случае необходимо использовать метод autoFields.

Будьте осторожны с содержать, когда и выбрать несколько полей в отозваны, у всегда должны выбрать внешний ключ также:

Когда вы ограничиваете поля, которые выбираются из ассоциации, вы должны убедиться, что выбираются столбцы внешнего ключа. Невозможность выбора полей внешнего ключа приведет к тому, что связанные данные не будут присутствовать в конечном результате.

Смежные вопросы