在Eloquent中模拟右连接

时间:2015-04-26 09:29:07

标签: php laravel eloquent

我有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。

1 个答案:

答案 0 :(得分:4)

尝试whereDoesntHave

Person::whereDoesntHave('reviews')->get();

来自API (4.2)

  

向查询添加关系计数条件。

来自 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);
}