用户模型具有以下关系:
public function getWorkload() : ActiveQuery
{
return $this->hasMany(ScheduleWorkload::className(), ['staff_id' => 'id']);
}
查找方法:
$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获取数据吗?没有后期处理可以吗?
我需要"工作量"作为数组参数,但不使用后处理,只是排除" staff_id"来自结果集。
Raw 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
答案 0 :(得分:1)
您无法在Yii中进行任何后期处理,因为ActiveQuery
将在嵌套查询结果中搜索外键,以便为连接关系构建嵌套数组。
最方便的方法是使用ArrayHelper
:
$staffs = User::find()
->alias('u')
->joinWith(['workload')
->where(['u.is_staff' => 1])
->all();
return \yii\helpers\ArrayHelper::toArray($staffs, [
User::className() => [
'id',
'first_name',
'last_name',
'name' => function ($user) {
return $user->first_name . ' ' . $user->last_name
},
'undelivered_messages',
'workload',
],
ScheduleWorkload::className() => [
'date',
'time_ranges',
'comment'
]
], true);