Может войдёшь?
Черновики Написать статью Профиль

Настройка дополнительных параметров метода FirstOrCreate в Laravel 5.3

перевод новое в 5.3

Ещё одна новинка в Laravel 5.3! На этот раз это обновление метода PHPfirstOrCreate() в Eloquent.

Для тех, кто не знаком с этим методом: вы можете передать массив значений в метод PHPfirstOrCreate(), и он будет искать запись с указанными свойствами. Если она существует, метод вернёт найденный экземпляр, а если нет — создаст её и вернёт созданный экземпляр.

Вот пример:

PHP
$tag Tag::firstOrCreate(['slug' => 'matts-favorites']);

Хорошо. Это очень удобно. Но.

Что если тег со свойством slug = matts-favorites является тегом со свойством label = Matts favorites?

PHP
$tag Tag::firstOrCreate(['slug' => 'matts-favorites''label' => 'Matts Favorites']);

ОК, это работает. Но теперь представьте такой сценарий: вам надо создать тег со свойствами slug = matts-favorites и label = Matt's favorites, только если нет тега со свойством slug = matts-favorites, а если он есть, то вам нужен этот существующий тег, даже несмотря на то, что его свойство label имеет другое значение. Взгляните:

PHP
$tag Tag::firstOrCreate(
  [
'slug' => 'matts-favorites'],
  [
'label' => "Matt's Favorites"]
);

Мы указали, что модель Tag должна искать тег со свойством slug равным matts-favorites и возвращать его, если найдёт. А если нет, то создать новый тег со свойствами slug = matts-favorites и label = Matt's favorites, и вернуть его. Вжух. Превосходно.

Как вы считаете, полезен ли этот материал? Да Нет

Комментарии (2)

tmanager

Неясно, возвращается ли в экземпляре id.

Helldar

При использовании метода `create` всегда возвращается полная модель записи.

Написать комментарий

Разметка: ? ?

Авторизуйся, чтобы прокомментировать.