我有2个数据库(AccessControls& User)。
AccessControl表包含以下字段:AC_id,User_id,AccessControls。
用户表包含以下字段:User_id,User_name,UserType。
我想要达到的目标是: - 打印出UserType = 1(在用户表中)和AccessControl表中不存在的User_id的用户。
结果将存储在我的view.blade.php
中的表格中与此同时,我设法得到第一部分,即UserType = 1的用户。但是,我不知道如何获得第二部分,即检查UserConid表中是否存在User_id。
在我的控制器内:
$user = UserEntry::where('UserType', '=', 1)->get();
我粗略地认为查询应该是这样的:
选择语句user.User_id!= AccessControl.User_id
关于如何在单个查询中实现这两个部分的任何想法?
答案 0 :(得分:0)
SQL方式与ISNULL()结合使用LEFT JOIN:
SELECT
*
FROM
users
LEFT JOIN
AccessControl
ON
user.User_id = AccessControl.User_id
WHERE
users.userType = 1
AND
AccessControl.User_id IS NULL
我确定你把它翻译成了laravel。
答案 1 :(得分:0)
not exists
User::where('UserType',1)
->whereNotExists(function ($q) {
$q->from('AccessControl')
->where('AccessControl.User_id', DB::raw('users.id'));
})
->get();
或leftJoin
:
User::where('UserType',1)
->leftJoin('AccessControl','AccessControll.User_id','=','users.id')
->whereNull('AccessControll.id')
->get(['users.*']);
检查性能,假设左连接会更快。