Якщо ви працювали з Laravel протягом будь-якого часу, ви, напевно, знаєте стандартні методи створення красномовних моделей, таких як make()
, create()
, update
і save()
. Laravel включає деякі інші методи, які також дуже корисні для створення та оновлення моделей, які, на мою думку, не отримують достатньої уваги. Тому в цій статті я хотів би розглянути деякі з цих додаткових методів і пояснити, як вони можуть бути корисні.
firstOrNew
Метод firstАбоNew
дійсно корисний для пошуку першої моделі, яка відповідає деяким обмеженням, або створення нової, якщо немає моделі, яка відповідає цим обмеженням.
Ви можете взяти фрагмент коду, який виглядає так:І перетворити його на це:Ви також можете передати масив додаткових атрибутів, щоб встановити як другий параметр, якщо не знайдено існуючої Model:
$user = User::where('email', request('email'))->first();
if ($user === null) {
$user = new User(['email' => request('email')]);
}
$user->name = request('name');
$user->save()
$user = User::firstOrNew(['email' => request('email')]);
$user->name = request('name');
$user->save()
$user = User::firstАбоNew(
['email' => request('email')],
['name' => request('name')]
);
$user->save();
firstOrCreate
Метод firstOrCreate
дуже схожий на метод.firstOrNew
Він намагається знайти модель, що відповідає атрибутам, які ви передаєте в першому параметрі. Якщо модель не знайдено, вона автоматично створює та зберігає нову модель після застосування будь-яких атрибутів, переданих у другому параметрі:
$user = User::firstOrCreate(
['email' => request('email')],
['name' => request('name')]
);
// No call to $user->save() needed
firstOr
I recently found the firstOr
method while source-diving. The firstOr
method retrieves the first Model from a query, or if no matching Model is found, it will call a callback passed. This can be really useful if you need to perform extra steps when creating a user or want to do something other than creating a new user:
$user = User::where('email', request('email'))->firstOr(function () {
$account = Account::create([ //... ]);
return User::create([
'account_id' => $account->id,
'email' => request('email'),
]);
});
updateOrCreate
Метод updateOrCreate
намагається знайти Модель, що відповідає обмеженням, прийнятим як перший параметр. Якщо буде знайдено відповідну модель, вона оновить відповідність атрибутами, переданими як другий параметр. Якщо відповідної моделі не знайдено, буде створено нову Модель, у якій як перший параметр будуть передані обмеження, так і атрибути, передані як другий параметр.
Ви можете зробити рефакторинг цього фрагмента коду:До цього за допомогою методуupdateOrCreate
:
$user = User::where('email', request('email'))->first();
if ($user !== null) {
$user->update(['name' => request('name')]);
} else {
$user = User::create([
'email' => request('email'),
'name' => request('name'),
]);
}
// Do other things with the User
$user = User::updateOrCreate(
['email' => request('email')],
['name' => request('name')]
);
// Do other things with the User
Висновок
Загалом, я думаю, що ці методи можуть допомогти очистити ваш код за певних обставин і є чудовими варіантами, які можна мати у своєму поясі інструментів! Дайте мені знати, якщо ви знаєте будь-які інші, які дійсно корисні та недостатньо відомі. Мені подобається дізнаватися про ці маленькі деталі, з якими так приємно працювати з Laravel.