gpt4 book ai didi

php - Laravel Advanced Wheres 如何将变量传递给函数?

转载 作者:IT老高 更新时间:2023-10-28 12:00:27 29 4
gpt4 key购买 nike

文档中的示例:

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();

更多信息 here .

编辑(2019 年更新):

PHP 7.4(将在 November 28, 2019 发布)引入了称为 arrow functions 的匿名函数的较短变体。这使得这不那么冗长。

一个使用 PHP 7.4 的示例,在功能上几乎等效(请参阅下面的第 3 个要点):

DB::table('users')->where(fn($query) => $query->where('activated', '=', $activated))->get();

与常规语法的区别:

  • fn 关键字而不是 function
  • 无需显式列出应从父作用域捕获的所有变量 - 现在这是按值自动完成的。见后面例子中缺少 use 关键字。
  • 箭头函数总是返回一个值。这也意味着在声明它们时不可能使用 void 返回类型。
  • return 关键字必须省略。
  • 箭头函数必须有一个表达式,即返回语句。目前不支持多行功能。不过,您仍然可以链接方法。

关于php - Laravel Advanced Wheres 如何将变量传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29548073/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com