Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Laravel:查询生成器-使用WHERE NOT IN+子句和WHERE另一个表语句抛出错误_Database_Laravel - Fatal编程技术网

Database Laravel:查询生成器-使用WHERE NOT IN+子句和WHERE另一个表语句抛出错误

Database Laravel:查询生成器-使用WHERE NOT IN+子句和WHERE另一个表语句抛出错误,database,laravel,Database,Laravel,这个脚本包含两个表,首先我需要查询sites\u表,然后选择roles\u表中不存在的用户 我的SQL脚本如下所示 选择s.sites\u id、s.site\u名称、s.site\u代码 从网站 如果不存在,则从角色r中选择*,其中s.sites\u id=r.sites\u id和r.user\u id=3501 我已经转换成了Laravel查询生成器 我收到了这样的拉威尔错误 错误例外 未定义变量:用户 错误表示您正试图使用未在该范围内初始化的变量$user 如果在查询中使用闭包,很可能

这个脚本包含两个表,首先我需要查询sites\u表,然后选择roles\u表中不存在的用户

我的SQL脚本如下所示

选择s.sites\u id、s.site\u名称、s.site\u代码 从网站 如果不存在,则从角色r中选择*,其中s.sites\u id=r.sites\u id和r.user\u id=3501

我已经转换成了Laravel查询生成器

我收到了这样的拉威尔错误

错误例外 未定义变量:用户


错误表示您正试图使用未在该范围内初始化的变量$user

如果在查询中使用闭包,很可能只需要通过use传递$user

$st = DB::table("sites")
->select('sites_id','site_name','site_code')
->whereNotIn('sites_id',function($query) use ($user) {  // <---- $user will be passed into the function
    $query->select('sites_id')
          ->from('roles')
          ->where('roles.user_id',$user->id);
          })          

->get();

闭包也可以从父范围继承变量。任何这样的 变量必须传递给use language构造。从PHP7.1, 这些变量不得包括超全局变量、$this或变量 与参数同名

求解代码


我们无法访问此url,因为它不在公共域中,如果它提供更多信息,请在此处作为图像包含。很可能您忘记将$user变量正确传递到闭包中。函数$query use$user{…}问题不在此查询中,您在某处使用的变量$user未定义或未按Leonid所说的作为闭包传递。@LeonidShumakov,您应该提供它作为答案。这将是本例中唯一的问题;是工作,但我想在我的控件中使用$user->id get方法,其中的'roles.user_id','1001';是工作,但我想在我的应用程序中使用$user->id get方法contoller@KazeiItsushi将use$user添加到匿名函数的定义后,在where中使用$user->id。刚刚更新了示例。哇,它现在工作了!。拉威尔:查询生成器从来没有教过我这方面的知识。我爱你,兄弟。通过添加“use$user”,您如何知道是否存在任何引用语法?此语法是PHP的核心。只需阅读有关匿名函数的内容并进行一些练习。它与Laravel或数据库无关。
$st = DB::table("sites")
->select('sites_id','site_name','site_code')
->whereNotIn('sites_id',function($query) use ($user) {  // <---- $user will be passed into the function
    $query->select('sites_id')
          ->from('roles')
          ->where('roles.user_id',$user->id);
          })          

->get();

$sites_list  = DB::table("sites")
                        ->select('sites_id','site_name','site_code')
                        ->whereNotIn('sites_id',function($query) use ($user) { 
                            $query->select('sites_id')
                                  ->from('roles')
                                  ->where('roles.user_id', $user->id);
                                  })          

                        ->get();