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