在Laravel 5.1中,选择一个表中所有不在另一个表中存在的记录。

12

我想在Laravel 5.1中从一个表中获取所有在另一个表中不存在的记录。

我知道如何在核心php中实现这个功能,并且以下代码可以正常工作。

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

这个模型

public function audiences() 
{ 
return $this->belongsTo('App\BridalRequest', 'request_id'); 
}

但是当我尝试在 Laravel 中使用以下代码执行相同的操作时,

$all_bridal_requests_check = \DB::table('bridal_requests')
                    ->where(function($query)
                    {
                        $query->where('publisher', '=', 'bq-quotes.sb.com')
                              ->orWhere('publisher', '=', 'bq-wd.com-bsf');
                    })
                    ->whereNotIn('id', function($query) { $query->table('audiences')->select('request_id'); })
                    ->orderBy('created_on', 'desc')
                    ->get();

之后它给了我这个错误

调用未定义的方法 Illuminate\Database\Query\Builder::table()


1
你在模型类中定义了关系吗? - Saani
你能提供模型类的代码吗? - Saani
好的,这是代码... public function audiences() { return $this->belongsTo('App\BridalRequest', 'request_id'); } - Amrinder Singh
尝试这个:public function audiences() { return $this->belongsTo('App\BridalRequest', 'request_id', 'id'); } - Saani
2个回答

16

可以使用Laravel查询构建器按照以下方式构建上述查询。

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL

这相当于使用 Laravel 的查询构建器构建的以下查询。

\DB::table('table1 AS t1')
->select('t1.name')
->leftJoin('table2 AS t2','t2.name','=','t1.name')
->whereNull('t2.name')->get();

8

虽然有点晚,但我仍然想回答这个问题。在users模型文件中编写以下代码,可以创建Laravel Eloquent关系表:

public function mu_user()
{
  return $this->hasMany(\App\MainUser::class, 'id');
} 

现在从用户表中获取所有未与主用户建立关联的记录,如下所示:
$users = Users::doesnthave('mu_user')->get();

如果您想获取具有主用户的用户,则可以按如下查询:
$users = Author::has('mu_user')->get();

这非常简单。希望它能帮到你!


生命之带,我在Laravel文档中完全没有看到这个。非常感谢。 - trig79

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接