Laravel 9嵌套where查询传递变量出现未定义错误的求助
解决Laravel 9嵌套where查询中「Undefined variable $id」错误
问题根源在于嵌套的匿名闭包函数无法直接访问外部作用域的$id变量——PHP闭包的作用域是独立的,必须显式引入外部变量才能使用。
只需给闭包添加use($id),将外部的$id变量引入闭包作用域即可修复:
修改后的完整代码:
public function edit($id) { $category = Category::findOrFail($id); $parents = Category:: where('status' , 'active') ->where('id' , '<>' , $id) ->where(function($query) use ($id){ // 新增use($id)引入变量 return $query ->whereNull('parent_id') ->orWhere('parent_id', '<>', $id); })->get(); }
use($id)的作用是让闭包捕获外部的$id变量,确保闭包内部能正常读取该值。如果需要在闭包中修改外部变量,可以改为use(&$id)(按引用传递),这里仅需读取值,按值传递即可。
内容的提问来源于stack exchange,提问作者Abdelmonaem
相关产品推荐
相关产品推荐

