如何在過濾器查詢中傳遞兩個引數?
下面的作品,但我想使用 $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”
我知道我缺少一些基本的東西,但很難弄清楚。任何幫助深表感謝。
uj5u.com熱心網友回復:
是的,您缺少如何從父范圍繼承變數。這是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)
);
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/493823.html
