Laravel whereIn只返回其中的一项



我有以下Eloquent查询

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

这是完美的。问题是每个user_id可以有多个任务,但我只想返回每个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);
}
])

最新更新