Вы должны индивидуально настраивать защитные оболочки, выбирая поля для других защитных оболочек, работать не будет.
Чтобы быть точным, вы не можете выбрать поля для удержания из где-нибудь еще, чем соответствующей конфигурации оболочки, с единственным исключением belongsTo/hasOne
ассоциаций, которые используют стратегию соединения, поля для них могут быть выбраны в select()
зове немедленный «родительский» запрос, так как эти ассоциации будут извлекаться через соединение в этом запросе.
Если, например Sites
было бы belongsTo
ассоциацию, то вы можете выбрать поля для него с помощью select()
вызова на Orders
. Если Users
будет belongsTo
, но Sites
a hasMany
, то вы можете использовать select()
, чтобы позвонить по телефону Sites
, чтобы выбрать поля для Users
.
Это, как говорится, в вашем случае вы либо использовать опцию queryBuilder
для определения обратных вызовов в вложенной структуре массива
contain([
'Sites' => [
'queryBuilder' => function ($q) {
return $q
->select([
'Sites.id',
'Sites.user_id'
]);
},
'Users' => function ($q) {
return $q
->select([
'Users.id',
'Users.name',
'Users.owner_id',
'Users.firstname',
'Users.lastname'
]);
}
]
])
или, если вы на самом деле не нужен конструктор запросов, используйте опцию fields
contain([
'Sites' => [
'fields' => [
'Sites.id',
'Sites.user_id'
],
'Users' => [
'fields' => [
'Users.id',
'Users.name',
'Users.owner_id',
'Users.firstname',
'Users.lastname'
]
]
]
])
Смотрите также
ок спасибо много для этих Infos. – 2ndGAB