将变量传递到 Laravel AdvancedWhere 闭包
Laravel 文档提供了一个使用带有闭包的 whereExists 来连接表的示例:
DB::table('users') ->whereExists(function($query) { $query->select(DB::raw(1)) ->from('orders') ->whereRaw('orders.user_id = users.id'); }) ->get();
但是如果你需要将外部变量传递到闭包中怎么办,例如搜索
->where('city_id', '=', $this->city->id) ->where(function($query) { $query->where('name', 'LIKE', '%'.$searchQuery.'%') ->orWhere('address', 'LIKE', '%'.$searchQuery.'%') })
目前的解决方案是创建一个新的属性并使用 $this 来访问它,但是有没有更方便的方法?
是的,你可以使用 use 关键字来查询将变量从父作用域传递到闭包中:
DB::table('users')->where(function ($query) use ($activated) { $query->where('activated', '=', $activated); }) ->get();
在 PHP 7.4 中,您可以使用较短的箭头函数语法:
DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated)) ->get();
箭头函数和常规闭包之间的主要区别:
以上是如何将变量传递到 Laravel AdvancedWhere 闭包中?的详细内容。更多信息请关注PHP中文网其他相关文章!