首页 >数据库 >mysql教程 >如何将变量传递到 Laravel AdvancedWhere 闭包中?

如何将变量传递到 Laravel AdvancedWhere 闭包中?

Susan Sarandon
Susan Sarandon原创
2024-12-24 20:34:10710浏览

How Can I Pass Variables into Laravel Advanced Where Closures?

将变量传递到 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();

箭头函数和常规闭包之间的主要区别:

  • fn 关键字而不是函数
  • 从父作用域自动捕获变量
  • 箭头函数总是返回一个值
  • 返回关键字必须是省略
  • 箭头函数必须有一个表达式作为返回语句

以上是如何将变量传递到 Laravel AdvancedWhere 闭包中?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn