Eloquent query to list items visibility constraints
我正在为一个 Eloquent 查询而苦苦挣扎。我的最终目标是列出任何人撰写的所有公开帖子,以及给定用户在给定出版物中撰写的私人帖子。
例子:
鉴于这 3 个帖子
标题:标题 1 |用户 ID:1 | is_private: 真
标题:标题 2 |用户 ID:2 | is_private: 假
标题:标题 3 |用户 ID:3 | is_private: 真
userId 1 的输出应该是:
标题 1 和标题 2
我最好的方法是:
1 2 3 4 5 6 | $posts = Post::WHERE('publication_id', $publicationId) ->WHERE('is_private', FALSE) ->WHERE(FUNCTION ($query) { $query->WHERE('owner_id', auth()->id()) ->WHERE('is_private', TRUE); }); |
我知道这远远不是我们需要的。
如果第二个 where 语句更改为
可能会起作用
1 2 3 4 5 6 | $posts = Post::WHERE('publication_id', $publicationId) ->WHERE('is_private', FALSE) ->orWhere(FUNCTION ($query) { $query->WHERE('owner_id', auth()->id) ->WHERE('is_private', 'true'); }); |
原因是第一个 where 将限制第二个 where 仅搜索公共帖子以检查私人帖子。这不会产生预期的结果。
一切顺利。
你应该试试这个:
1 2 3 4 | $posts = Post::WHERE('publication_id', $publicationId) ->WHERE('is_private', FALSE) ->orWhere('owner_id', auth()->id()) ->GET(); |
试试这个
1 2 3 4 5 | $posts = Post::WHERE('publication_id', $publicationId) ->WHERE(FUNCTION ($query) { $query->WHERE('is_private', FALSE) ->orWhere('owner_id', auth()->id()); }); |