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

Amr*_*ngh 6 php mysql laravel-5.1

我想从Laravel 5.1中的其他表中不存在的表中获取所有记录.

我知道如何在核心php中执行此操作,并且它可以正常使用以下代码

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Run Code Online (Sandbox Code Playgroud)

该模型

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

但是当我尝试使用以下代码在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();
Run Code Online (Sandbox Code Playgroud)

然后它给了我这个错误

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

San*_*tel 12

可以使用laravel查询构建器以下列方式构建上述查询.

SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Run Code Online (Sandbox Code Playgroud)

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

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


Mur*_*mal 8

迟到了,但我想补充一下这个问题。users通过在模型文件中编写以下代码来创建表之间的 Laravel 雄辩关系,

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

现在从用户表中获取没有主用户关系的所有记录,如下所示,

$users = Users::doesnthave('mu_user')->get();
Run Code Online (Sandbox Code Playgroud)

如果你想获取拥有 main_users 的用户,那么你可以编写如下查询,

$users = Author::has('mu_user')->get();
Run Code Online (Sandbox Code Playgroud)

就是这么简单。希望能帮助到你!