Ещё одна новинка в Laravel 5.3! На этот раз это обновление метода PHPfirstOrCreate()
в Eloquent.
Для тех, кто не знаком с этим методом: вы можете передать массив значений в метод PHPfirstOrCreate()
, и он будет искать запись с указанными свойствами. Если она существует, метод вернёт найденный экземпляр, а если нет — создаст её и вернёт созданный экземпляр.
$tag = Tag::firstOrCreate(['slug' => 'matts-favorites']);
Что если тег со свойством slug = matts-favorites является тегом со свойством label = Matts favorites?
$tag = Tag::firstOrCreate(['slug' => 'matts-favorites', 'label' => 'Matts Favorites']);
ОК, это работает. Но теперь представьте такой сценарий: вам надо создать тег со свойствами slug = matts-favorites и label = Matt's favorites, только если нет тега со свойством slug = matts-favorites, а если он есть, то вам нужен этот существующий тег, даже несмотря на то, что его свойство label имеет другое значение. Взгляните:
$tag = Tag::firstOrCreate(
['slug' => 'matts-favorites'],
['label' => "Matt's Favorites"]
);
Мы указали, что модель Tag должна искать тег со свойством slug равным matts-favorites и возвращать его, если найдёт. А если нет, то создать новый тег со свойствами slug = matts-favorites и label = Matt's favorites, и вернуть его. Вжух. Превосходно.
Комментарии (2)
Неясно, возвращается ли в экземпляре id.
При использовании метода `create` всегда возвращается полная модель записи.