繁体   English   中英

如何在 scopeFilter 查询中传递 2 个参数

[英]How to pass 2 parameters in a scopeFilter query

如何在过滤器查询中传递两个参数?

下面的作品,但我想使用 $filters[$serviceDate ] 而不是硬编码最后一行中的日期

 'filters' => Request::all('serviceDate',  'mealType'),
 public function scopeFilter($query, array $filters)
{
        $query
            ->when( $filters['mealType'] ?? null, function ($query, $mealType) {
                $query->whereDoesntHave('student_meals', fn ($query) => 
                    $query->where('meal_type_id', $mealType )
                        ->where('void', false)
                        ->where('date_served', '2022-06-19')  
            });          
}

我试过了

 ->when( $filters['mealType'] ?? null, function ($query, $mealType, $serviceDate) {
                $query->whereDoesntHave('student_meals', fn ($query) => 
                    $query->where('meal_type_id', $mealType )
                        ->where('void', false)
                        ->where('date_served', $serviceDate));

并得到错误:

函数 App\Models\Student::App\Models{closure}() 的参数太少,在 /Applications/XAMPP/xamppfiles/htdocs/Sos/vendor/laravel/framework/src/Illuminate/Conditionable/Traits/Conditionable 中传递了 2 个.php 在第 30 行,预计正好 3

我试过了

->when( ($filters['mealType'] && $filters['serviceDate']) ?? null, function ($query, $mealType, $serviceDate) {
                $query->whereDoesntHave('student_meals', fn ($query) => 
                    $query->where('meal_type_id', $mealType )
                        ->where('void', false)
                        ->where('date_served', $serviceDate));

并得到错误:
未定义的数组键“mealType”

我知道我缺少一些基本的东西,但很难弄清楚。 任何帮助深表感谢。

是的,您缺少如何从父范围继承变量 这是PHP中匿名函数的基本知识。

你需要use ($mealType) ,所以正确的代码应该是这样的:

public function scopeFilter($query, array $filters)
{
    $mealType = $filters['mealType'] ?? null;
    $serviceDate = $filters['serviceDate'] ?? null;
    $query
        ->when($mealType, function($query) use ($mealType,$serviceDate) {
            $query->whereDoesntHave('student_meals', fn($query) => $query->where('meal_type_id', $mealType)
                ->where('void', false)
                ->where('date_served', $serviceDate)
            );
        });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM