【问题标题】:Laravel Printing out table_1 values that do not exist in table_2Laravel 打印出 table_2 中不存在的 table_1 值
【发布时间】:2014-09-11 06:47:08
【问题描述】:

我有 2 个数据库(AccessControls 和用户)。

AccessControl 表有以下字段:AC_id、User_id、AccessControls。

User 表有以下字段:User_id、User_name、UserType。

我想要实现的是: - 打印出 UserType = 1(在用户表中)和在 AccessControl 表中不存在的 User_id 的用户。

结果将存储在我的 view.blade.php 中的一个表中

与此同时,我设法获得了第一部分,即 UserType = 1 的用户。但是,我不知道如何获得第二部分,即检查 User_id 是否存在于 AccessControl 表中。

在我的控制器内部:

$user = UserEntry::where('UserType', '=', 1)->get();

我有一个粗略的想法,查询应该是这样的:

Select 语句 Where user.User_id != AccessControl.User_id

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

【问题讨论】:

    标签: php mysql database laravel laravel-4


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢@deczo!!感谢你的帮助! :)
    【解决方案2】:

    SQL 方式是 LEFT JOIN 结合 ISNULL():

    SELECT
        *
    FROM
        users
    LEFT JOIN
        AccessControl
    ON
        user.User_id  = AccessControl.User_id
    WHERE
       users.userType = 1
    AND
       AccessControl.User_id IS NULL
    

    我相信你已经把它翻译成 laravel。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-19
      • 2021-11-14
      相关资源
      最近更新 更多