Пользователь имеет следовать соотношение:Yii2 hasMany без полей связи
public function getWorkload() : ActiveQuery
{
return $this->hasMany(ScheduleWorkload::className(), ['staff_id' => 'id']);
}
метод Find:
$staffs = User::find()
->alias('u')
->joinWith(['workload as uw' => function($q) {
$q->select(['uw.staff_id', 'uw.date', 'uw.time_ranges']);
}], true)
->select([
'u.id',
'CONCAT(u.first_name, \' \', u.last_name) as name',
'u.first_name',
'u.last_name',
'u.undelivered_messages',
])
->where(['u.is_staff' => 1])
->asArray()
->all()
;
мне нужно получить данные без uw.staff_id в наборе результатов? Можно ли без постобработки?
UPDATE: набор Result, что у меня есть
мне нужно «нагрузка» в качестве параметра массива, но не использовать постобработку и просто исключить «staff_id» из результирующего набора.
Сырье SQL:
SELECT `u`.`id`, `u`.`undelivered_messages`
FROM `user` `u`
LEFT JOIN `schedule_workload` `uw` ON `u`.`id` = `uw`.`staff_id`
WHERE `u`.`is_staff`=1
и какой набор результата вы сейчас? как я вижу, переменная '$ staffs' имеет тип' ActiveQuery'. Что является результатом '$ staffs-> createCommand() -> rawSql'? – oakymax
Я обновляю сообщение. Посмотрите раздел обновления. $ штат - массив. Я забыл включить -> asArray() -> all() – johndoek