Laravel 高级的 Wheres 如何将变量传递到函数中?

11 浏览
0 Comments

Laravel 高级的 Wheres 如何将变量传递到函数中?

在文档中的示例:\n

DB::table('users')
        ->whereExists(function($query)
        {
            $query->select(DB::raw(1))
                  ->from('orders')
                  ->whereRaw('orders.user_id = users.id');
        })
        ->get();

\n但是如果我需要使用外部变量怎么办,就像这样:\n

            ->where('city_id', '=', $this->city->id)
            ->where(function($query)
                {
                    $query->where('name', 'LIKE', '%'.$searchQuery.'%')
                    ->orWhere('address', 'LIKE', '%'.$searchQuery.'%')
                })

\n目前,我创建了一个新属性并通过$this->访问它,但是否有更方便的方法?

0
0 Comments

在使用Laravel的eloquent时,你可能会尝试以下方法。

$result = self::select('*')
                    ->with('user')
                    ->where('subscriptionPlan', function($query) use($activated){
                        $query->where('activated', '=', $roleId);
                    })
                    ->get();

问题出现的原因是在上述代码中,我们想要将变量$activated传递给where子查询中的闭包函数,但是闭包函数无法直接访问外部的变量。因此,我们需要使用use关键字将$activated变量传递给闭包函数。

解决方法是在闭包函数之前使用use关键字,并将$activated变量作为参数传递给闭包函数。这样,闭包函数就可以访问和使用$activated变量了。

上述代码中的解决方法是将$activated变量传递给闭包函数,然后在闭包函数中将其作为参数使用。这样,我们就可以在where子查询中使用$activated变量了。

0
0 Comments

Laravel高级where语法中如何将变量传递给函数?

在Laravel的高级where语法中,有时候需要将变量传递给函数,以便在查询过程中使用这些变量。下面是一个示例代码:

DB::table('users')->where(function ($query) use ($activated,$var2) {
    $query->where('activated', '=', $activated);
    $query->where('var2', '>', $var2);
})->get();

在上面的代码中,我们可以看到在where函数中传递了两个变量$activated和$var2。这样就可以在查询中使用这些变量来进行条件筛选。

解决方法非常简单,只需要在where函数中使用use关键字将变量传递进去即可。可以通过use($var1, $var2)的方式传递多个变量。

通过这种方式,我们可以在Laravel的高级where语法中轻松地将变量传递给函数,实现更加灵活和动态的查询条件。

0
0 Comments

在Laravel中,如果想将父作用域中的变量传递给闭包函数,可以使用use关键字。具体示例如下:

DB::table('users')->where(function ($query) use ($activated) {
    $query->where('activated', '=', $activated);
})->get();

从PHP 7.4开始,引入了一种更简洁的匿名函数语法,称为箭头函数(arrow functions)。使用箭头函数可以简化代码。示例如下:

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

与常规语法相比,箭头函数的差异如下:

- 使用fn关键字代替function

- 不需要显式列出应从父作用域中捕获的所有变量 - 这由语言自动按值捕获。因此,后面的示例中没有使用use关键字。

- 箭头函数始终返回一个值,这意味着无法在声明时使用void返回类型。

- 必须省略return关键字。

- 箭头函数必须只有一个表达式,即返回语句。目前不支持多行函数,但仍然可以链式调用方法。

至于将fn($query)命名为f的问题,目前尚不支持给箭头函数命名。

0