• Час читання ~2 хв
  • 09.06.2022

Якщо ви працювали з 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.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Про автора CrazyBoy49z
WORK EXPERIENCE
Контакти
Ukraine, Lutsk
+380979856297