【问题标题】:How to do condition based query in Eloquent ORM, Laravel?如何在 Eloquent ORM、Laravel 中进行基于条件的查询?
【发布时间】:2018-04-16 00:14:17
【问题描述】:

我想获得公共时间线,我可以在其中访问所有公共帖子并让朋友获得所有帖子(即它可能是公开的或私人的)。在一种情况下,我如何管理它,我可以获得每个人的所有公开帖子和朋友的私人帖子。下面的代码仅适用于公共视频。

$friends = json_decode($this->friend->where('user', $this->currentUser->id)->first()->list, true);
$blockedUserArray = $this->getBlockedList();
$friends[] = $this->currentUser->id;
$videos = $this->video
        ->withCount('videoComment', 'videoLike')
        ->where('privacy', 'EVERYONE')
        ->orWhereIn('user', $friends)
        ->whereNotIn('user', $blockedUserArray)
        ->latest()
        ->paginate($this->videoPaginate);

我可以用两个查询来完成,但它会影响分页。有没有办法在一个查询中做到这一点?

【问题讨论】:

  • 简短答案,是的,长答案,这取决于:)
  • 如果关系有意义,就可以实现。但如果你想让人们看到它,你需要为此发布更多数据。

标签: php laravel eloquent


【解决方案1】:

您必须将这两个查询分组

->where('privacy', 'EVERYONE')
->orWhereIn('user', $friends)

->where($query, function($query) use ($friends) {
    $query->where('privacy', 'EVERYONE')
          ->orWhereIn('user', $friends);
})

查看文档Parameter Grouping

【讨论】:

  • 我上面的查询确实有效,但由于数据较少,我很困惑。感谢您的参数分组,这是一种很酷的条件查询方式
猜你喜欢
  • 1970-01-01
  • 2017-07-17
  • 1970-01-01
  • 1970-01-01
  • 2015-01-21
  • 1970-01-01
  • 1970-01-01
  • 2015-12-06
  • 1970-01-01
相关资源
最近更新 更多