我正在尝试在Eloquent中转换以下SQL查询:
SELECT id, title FROM chapters
JOIN chapters_has_parents
WHERE chapters.id = chapters_has_parents.parents_id
AND chapters.id
NOT IN ( SELECT children_id FROM chapters_has_parents)
根据需要返回id 1和标题“introduction”。
我尝试了很多选项,但无法找到正确的查询。 这是我的代码:
$startingChapter = Chapter::join('chapters_has_parents','chapters.id', '=', 'chapters_has_parents.parents_id')
->whereNotIn('chapters_has_parents.children_id', ['*'])
->get(['chapters.id', 'chapters.title']);
whereNotIn完全不起作用,无论我尝试什么(我知道'*'不对,但我不知道我应该把它放在数组中。)如果我删除它,我得到的确切同样的结果。
我做错了什么?
答案 0 :(得分:0)
您可以使用内部回调,但您必须进行第二次查询。
whereIn(“id”,function($ q){return $ query-> select(“children_id”) - > from(“chapter_has_parents”) - > get();})
答案 1 :(得分:0)
查询关系缺席
访问模型的记录时,您可能希望根据缺少关系来限制结果。例如,假设您要检索所有没有任何评论的博客帖子。为此,您可以将关系的名称传递给doesntHave和orDoesntHave方法:
$posts = App\Post::doesntHave('comments')->get();
如果您需要更多功能,可以使用whereDoesntHave和orWhereDoesntHave方法在didntHave查询中放置“where”条件。这些方法允许您向关系约束添加自定义约束,例如检查注释的内容:
$posts = Post::whereDoesntHave('comments', function ($query) {
$query->where('content', 'like', 'foo%');
})->get();