Laravel中如何给WhereRaw传参?whereExists闭包变量报错求助
解决Laravel中whereExists闭包无法访问外部变量的问题
你的代码报错的核心原因是闭包函数无法直接访问外部作用域的$acid变量——Laravel的查询闭包有自己独立的作用域,外部变量不会自动传入,所以闭包里找不到$acid才会触发错误。
修正方案:用use()传递外部变量
只需要在闭包定义时加上use ($acid),把外部变量注入到闭包的作用域中即可,修正后的代码如下:
$acid = 'vnt'; $paylogs = DB::table('paylog')->whereExists(function($query) use ($acid) { $query->select(DB::raw(1)) ->from('users') ->whereRaw("users.ownerid = ?", [$acid]); })->get();
更符合Laravel规范的写法
其实还可以不用whereRaw,直接用Laravel的查询构造器方法,代码可读性更好:
$acid = 'vnt'; $paylogs = DB::table('paylog')->whereExists(function($query) use ($acid) { $query->select(DB::raw(1)) ->from('users') ->where('users.ownerid', $acid); })->get();
这样修改后,闭包就能正常获取到$acid的值,执行对应的关联查询了。
内容的提问来源于stack exchange,提问作者RiHang
相关产品推荐
相关产品推荐

