Yii2 hasMany没有链接字段

时间:2016-07-26 08:32:23

标签: activerecord yii2

用户模型具有以下关系:

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获取数据吗?没有后期处理可以吗?

更新: 我有的结果集 enter image description here

我需要"工作量"作为数组参数,但不使用后处理,只是排除" 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

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);