Потому что уже есть метод find(), который ищет СТРОГО по идентификатору и возвращает одну модель, тогда как firstOrCreate() ищет по ..? правильно, по набору атрибутов, и в результате может найтись несколько моделей. Поэтому такой акцент. Достаточно открыть код метода и немного подумать.
Роман, смотри
find() ищет только по id. Без вариантов. Он не может найти по имени, если нет ID. Он вообще без ид ничего не может. Зато. first() ищет, как хочет. Даже если ID нет. Есть только имя или slug? Используй first, есть id – find. Да, first ищет тоже по id. B в этом они схожи с find. Но find – это еще короткий синтаксис. Чтобы не нужно было писать where('id', $id)->first()
Мы ведь в Ларавель)
Поэтому сразу
find($id)
Плюс еще тебе нужно былдер в объект преобразовать. Если ты просто сделаешь where('id', $id) то там будет запрос если задедешить. И только find или first преобразуют это месиво в объект. Так я себе это представляю)
т.е. мы в любом случае получим только одну запись? )))
я использую first/find только для поиска одной записи. Как искать несколько моделей не знаю, задачи такой не было. Я вижу главную разницу не в цели использования, а в методе. Find не найдет, не зная id, first найдет по любому атрибуту без id ( в том числе и с id).
Роман, забыл написать - first не просто по name найдет, а выберет первое значение с name (одинаковых name много может быть). У меня так однажды пользователя с ид 1 находил, когда я применял first к Auth. Я думал все Ларавель сломался, а там first возвращал к первому пользователю. Поэтому я теперь почти на автомате всегда пишу find если есть id, чтобы случайно не выбрать не тот объект. Ну и просто так удобней) А вообще это только кажется, что в Ларавеле что-то не так. Я периодически так думал и натыкался на сам виноват)) Создатели сделали очень крутой продукт