Laravel打印table_2中不存在的table_1值

时间:2014-07-20 18:35:53

标签: php mysql database laravel laravel-4

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

关于如何在单个查询中实现这两个部分的任何想法?

2 个答案:

答案 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.*']);

检查性能,假设左连接会更快。