【问题标题】:Passing outer function parameter to inner function Laravel将外部函数参数传递给内部函数 Laravel
【发布时间】:2021-09-21 12:25:41
【问题描述】:

下面的代码旨在使用服务 ID 检索所有服务提供者

  public function getProvidersByPackage($id = null){
    $package_id = $id;
        $providers = ServiceProvider::whereHas('services', function($query) {
            $query->where('packages.id', 1);
        })->get();
        dd($providers);
    }

我想用传递给外部函数 getProvidersByPackage() 的变量 $id 替换常量 1 我的问题是当我尝试以下操作时

      public function getProvidersByPackage($id = null){
$package_id = $id;
    $providers = ServiceProvider::whereHas('services', function($query) {
        $query->where('packages.id', $id);
    })->get();
    dd($providers);
}

我得到错误 $id is not defined 当我尝试时

     public function getProvidersByPackage($id = null){
    $package_id = $id;
        $providers = ServiceProvider::whereHas('services', function(&$package_id, $query) {
            $query->where('package.package_id', $package_id);
        })->get();
}

我得到下面的 ArgumentCountError

    Too few arguments to function   
    App\Http\Controllers\ShopController::App\Http\Controllers\{closure}(), 1 passed in
/var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php on line 1207 
    and exactly 2 expected

我做错了什么?

【问题讨论】:

标签: laravel-8


【解决方案1】:

在 PHP 中,您可以 pass a variable to a closure 使用 use 语法

public function getProvidersByPackage($id = null) {
    $package_id = $id;
    $providers  = ServiceProvider::whereHas('services', function ($query) use ($package_id) {
                $query->where('package.package_id', $package_id);
            })->get();
}

【讨论】:

    猜你喜欢
    • 2018-09-26
    • 2015-02-17
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多