Метод whenHas у Laravel є елегантним рішенням для виконання коду в залежності від наявності даних у запитах. Ця функція особливо корисна для обробки необов'язкових полів та умовних оновлень, що суттєво зменшує потребу в повторних перевірках наявності.
Цей підхід особливо вигідний при подачі форм, де певні поля активують конкретну бізнес-логіку. Наприклад, коли користувач підписується на електронні сповіщення, потрібно перевірити та зберегти додаткові налаштування, пов’язані з електронною поштою.
// Проста перевірка наявності
$request->whenHas('name', function ($name) {
// Обробка імені, якщо воно присутнє
});
Ось приклад менеджера налаштувань сповіщень:
// app/Controllers/PreferencesController.php
<?php
namespace App\Http\Controllers;
use App\Models\UserPreferences;
use Illuminate\Http\Request;
class PreferencesController extends Controller
{
public function update(Request $request, UserPreferences $preferences)
{
$request->whenHas('email_frequency',
function ($frequency) use ($preferences) {
$preferences->update([
'email_frequency' => $frequency,
'last_email_update' => now()
]);
}
);
$request->whenHas('push_enabled',
function ($enabled) use ($preferences) {
$preferences->update([
'push_enabled' => $enabled,
'push_updated_at' => now()
]);
},
function () use ($preferences) {
$preferences->update([
'push_enabled' => false,
'push_updated_at' => now()
]);
}
);
return response()->json([
'message' => 'Preferences updated successfully',
'preferences' => $preferences->fresh()
]);
}
}
Приклад використання:
// Вхідні дані з деякими перевагами
{
"email_frequency": "weekly"
}
// Відповідь
{
"message": "Preferences updated successfully",
"preferences": {
"email_frequency": "weekly",
"last_email_update": "2024-02-01T10:30:00.000000Z",
"push_enabled": false,
"push_updated_at": "2024-02-01T10:30:00.000000Z"
}
}
Метод whenHas спрощує обробку умовних запитів, зберігаючи чистоту та читабельність коду