【问题标题】:Laravel whereIn return only item of eachLaravel whereIn 仅返回每个项目
【发布时间】:2021-03-19 17:06:21
【问题描述】:

我有以下 Eloquent 查询

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

效果很好。问题是每个user_id 可以有多个任务,但我只想返回每个user_id一个任务

有什么想法吗?

【问题讨论】:

    标签: laravel eloquent where-in


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      为什么不使用 take()?

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-08-04
        • 2015-10-06
        • 2014-05-10
        • 2021-09-06
        • 2018-08-29
        相关资源
        最近更新 更多