【问题标题】:Laravel Get Collection for a CollectionLaravel 获取一个集合的集合
【发布时间】:2016-08-08 20:11:21
【问题描述】:

我有 2 个模型,一个 User 模型和一个 Post 模型。我正在尝试获取在某个日期范围内发布的用户集合。我只是迷失了如何将这两个模型联系在一起。两者之间是一对多的关系。

用户模型:

public function posts()
{
    return $this->hasMany('App\Models\Post', 'user_id');
}

所以,我想要一个帖子在日期 1 和日期 2 之间的用户集合,如果用户在这些日期之间有帖子,我想要这些帖子的集合。我知道我可以将 whereBetween 用于查询构建器,但我可以将它用于 eloquent 吗?另外,我如何按拥有这些帖子的用户模型对整个用户模型进行排序? filter() 方法呢?

$users = Users::all();

$users = $users->filter(function() {
   foreach ($users as $user)
   {
      if ($user->posts->whereBetween(date 1, date 2))
      { 
         return true; //something like that
      }
   }
});

【问题讨论】:

    标签: laravel laravel-5.2


    【解决方案1】:

    最好根据需要预先加载关系模型,然后处理结果。无需使用 if 检查。

    $users = Users::with(['posts' => function($query) {
    
        $query->whereBetween(date 1, date 2);
    
    }])->get();
    

    更多信息:Eager Loading

    【讨论】:

    • 或者你可以使用whereHas :)
    猜你喜欢
    • 1970-01-01
    • 2017-07-18
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-21
    • 2017-04-12
    相关资源
    最近更新 更多