Найти тему
Laravel Topsite Web

Методы firstOrCreate() против createOrFirst() в Laravel

Оглавление

В Laravel v10.20 вышла с совершенно новым методом под названием createOrFirst(), что может быть немного запутанным, потому что у Laravel уже был firstOrCreate(). В чем разница? Зачем нам для этого нужны два метода? Давай посмотрим.

createOrFirst()

Новый метод createOrFirst() предназначен для более эффективной работы в средах с высокой степенью параллелизма и помогает уменьшить условия, но требует уникального ограничения для базы данных.

С помощью createOrFirst мы инвертируем этот поток и полагаемся на таблицы, имеющие ограничение UNIQUE. Итак, сначала мы пытаемся создать запись, и если мы получим исключение из базы данных и определим, что это уникальное нарушение ограничения, мы попытаемся вместо этого найти соответствующую запись. Таким образом, параллельные процессы могут полагаться на характеристики ACID базы данных, и им больше никогда не придется беспокоиться об этом состоянии.

firstOrCreate()

firstOrCreate был оригинальным методом, и вот как он в настоящее время определяется.

Метод firstOrCreate попытается найти запись базы данных, используя заданные пары столбец/значение. Если модель не может быть найдена в базе данных, будет вставлена запись с атрибутами, полученными в результате слияния первого аргумента массива с необязательным вторым аргументом массива.

Что еще здорово в этом новом методе, так это то, что теперь исходный метод firstOrCreate использует новый метод createOrFirst под капотом.

Что использовать?

Я бы сказал, что в большинстве приложений исходный firstOrCreate подойдет, и вам действительно захочется использовать createOrFirst только тогда, когда вы находитесь в параллельной среде с огромным количеством трафика.