[英]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.