我有Person
belongsToMany
个对象的模型Review
。
这一切都很有效,我可以成功查询。
我现在要做的是查询没有与Person
相关联的所有Review
。
我尝试过像
这样的事情 Person::with('reviews')->whereNull('reviews.id')->get();
和
Person::whereHas('reviews', function($q)
{
$q->whereNull('id');
})->get();
但没有成功 - 我需要做些什么来获取没有Person
个对象的Review
个对象?
使用普通的SQL这很容易,但我有很多其他使用Eloquent模型的代码,所以我想在这里继续使用Eloquent。
答案 0 :(得分:4)
尝试whereDoesntHave
:
Person::whereDoesntHave('reviews')->get();
向查询添加关系计数条件。
来自 illuminate / database / Eloquent / Builder.php 的方法(参见代码here):
public function whereDoesntHave($relation, Closure $callback = null)
{
return $this->doesntHave($relation, 'and', $callback);
}
调用:
/**
* Add a relationship count condition to the query.
*
* @param string $relation
* @param string $boolean
* @param \Closure|null $callback
* @return \Illuminate\Database\Eloquent\Builder|static
*/
public function doesntHave($relation, $boolean = 'and', Closure $callback = null)
{
return $this->has($relation, '<', 1, $boolean, $callback);
}