Eloquent查询列出项目可见性约束

时间:2018-03-23 11:54:05

标签: laravel postgresql laravel-5 eloquent

我正在与一个Eloquent查询挣扎。我的最终目标是列出由任何人创作的所有公开帖子,以及由特定用户从给定出版物创作的私人帖子。

实施例

鉴于这3篇帖子

标题:标题1 | user_id: 1 | is_private: true

标题:标题2 | user_id: 2 | is_private: false

标题:标题3 | user_id: 3 | is_private: true

userId 1的输出应为:

标题1和标题2

我最好的拍摄是以下内容:

    $posts =  Post::where('publication_id', $publicationId)
        ->where('is_private', false)
        ->where(function ($query) {
            $query->where('owner_id', auth()->id())
                ->where('is_private', true);
        });

我所知道的远远不够。

3 个答案:

答案 0 :(得分:1)

如果第二个where语句更改为orWhere

,则可以正常工作
$posts = Post::where('publication_id', $publicationId)
    ->where('is_private', false)
    ->orWhere(function ($query) {
        $query->where('owner_id', auth()->id)
            ->where('is_private', 'true');
    });

原因是第一个限制第二个只搜索公共帖子以检查私人帖子的地方。这不会产生预期的结果。

一切顺利。

答案 1 :(得分:0)

试试这个

$posts =  Post::where('publication_id', $publicationId)
    ->where(function ($query) {
        $query->where('is_private', false)
            ->orWhere('owner_id', auth()->id());
    });

答案 2 :(得分:0)

你应该试试这个:

$posts =  Post::where('publication_id', $publicationId)
                       ->where('is_private', false)
                       ->orWhere('owner_id', auth()->id())
                       ->get();