【问题标题】:Laravel selectRaw omits appended columnsLaravel selectRaw 省略附加列
【发布时间】:2023-03-21 18:27:01
【问题描述】:

当我尝试使用原始 sql 时,为什么 laravel/eloquent/db 会忽略我的附加列?

有没有其他方法可以使用 groupBy 并使用可以保留我附加列的 eloquent 聚合结果?

我的模型类中有一个附加列

public function getWorkAttribute()
{
    switch ($this->work_tag) {
        case self::WORK_CREATIVE:
            return trans('unit_time.work.creative');
        case self::WORK_DEV:
            return trans('unit_time.work.dev');
        case self::WORK_QA:
            return trans('unit_time.work.qa');
        case self::WORK_REVIEW:
            return trans('unit_time.work.review');
    }
}

这就是我从存储库中获取数据的方式

public function getTeamMembersWithoutTask($team_id)
{
    $assigned_units = $this->getTeamAssignedUnits($team_id);
    $ids = $assigned_units->pluck('employee_id');

    return UnitTime::selectRaw('unit_id, employee_id, MAX(updated_at) as updated_at')
        ->where('team_id', $team_id)
        ->whereNotIn('employee_id', $ids)
        ->groupBy('employee_id')
        ->orderBy('updated_at', 'asc')
        ->get();
}

但是当我尝试检查是否还返回我的附加列时,它只是返回 null

$members_without_task = $team_repo->getTeamMembersWithoutTask($team->id);

foreach ($members_without_task as $member) {
    var_dump($member->work);
}

结果:

null
null
null
null
null
null

【问题讨论】:

    标签: php database laravel eloquent


    【解决方案1】:

    我自己刚刚找到答案,您需要包含附加列使用的列才能使其输出

    UnitTime::selectRaw('unit_id, work_tag, action_tag, employee_id, MAX(updated_at) as updated_at')
    

    【讨论】:

      猜你喜欢
      • 2016-03-28
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 2018-05-21
      • 2021-10-24
      • 2021-12-04
      • 1970-01-01
      相关资源
      最近更新 更多