Laravel口若悬河你从哪里得到的

Laravel口若悬河你从哪里得到的,laravel,eloquent,laravel-5.5,Laravel,Eloquent,Laravel 5.5,我在使用这种方法时遇到了一些问题,我已经阅读了文档,但我不是做错了什么,就是不理解它是如何工作的,或者它是一个bug 我的控制器中有以下代码: $books = Book::whereDoesntHave("author", function ($query) { $query->whereNotNull("died_at"); })->get(); 现在,它应该做的是返回所有作者仍然活着的书,以及所有没有作者的书,但是它做的恰恰相反 我假设whereDoesntHave(

我在使用这种方法时遇到了一些问题,我已经阅读了文档,但我不是做错了什么,就是不理解它是如何工作的,或者它是一个bug

我的控制器中有以下代码:

$books = Book::whereDoesntHave("author", function ($query) {
    $query->whereNotNull("died_at");
})->get();
现在,它应该做的是返回所有作者仍然活着的书,以及所有没有作者的书,但是它做的恰恰相反

我假设
whereDoesntHave()
应该检查模型是否没有指定的关系,在这种情况下,
author
模型的列
died\u在
具有特定的值

相反,它检查
author
模型,其中
列在
处没有值


我很困惑,这个函数到底应该如何工作?有人能给我解释一下吗。

你能试试这个吗,
doesntHave(“author”)
检查没有author的书和
where有
和closure check live author

$books = Book::doesntHave("author")->orWhereHas("author", function ($query) {
    $query->whereNotNull("died_at");
})->get();

您需要
whereHas
。但即使它没有作者,也应该返回一本书。如果它的空作者仍然活着,您不需要
$query->whereNull('died_at')
。你用的是双重否定,为什么要复杂化这就是困惑,因为从语法上看这个查询,我说的是返回所有没有作者的书,作者的值为dead\u at。您必须使用
->或wherehas(“author”),函数(
)。