Laravel whereIn return 每个项目的唯一项目

Laravel whereIn return only item of each

我有以下 Eloquent 查询

Task::whereIn('user_id', [5,6,7,8])
            ->onlyActive()
            ->with('user')
            ->get();

效果完美。问题是每个 user_id 可以有 多个任务 ,但我只想 return 每个任务 user_id.

有什么想法吗?

最简单的方法是在用户模型上定义一个新关系以获取最新任务 - 如果这对您有用

class User extends Model
{
    public function tasks()
    {
        return $this->hasMany(Task::class);
    }

    public function latestTask()
    {
        return $this->hasOne(Task::class)->latest();
    }
}

然后为每个用户查询一个活动任务

User::whereIn('id', [5,6,7,8])
    ->with(['latestTask' => function($query){
        $query->onlyActive();
    }])
    ->get();

为什么不使用 take()?

->with([
   'user' => function($user) {
       $user->tasks()->take(1);
    }
])