Database Laravel:查询生成器-使用WHERE NOT IN+子句和WHERE另一个表语句抛出错误
这个脚本包含两个表,首先我需要查询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查询生成器 我收到了这样的拉威尔错误 错误例外 未定义变量:用户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 如果在查询中使用闭包,很可能
错误表示您正试图使用未在该范围内初始化的变量$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();