it-swarm.com.ru

В чем разница между find (), findOrFail (), first (), firstOrFail (), get (), list (), toArray ()

В чем разница между этими методами:

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

Я использовал их, и каждый из них дает разные результаты, и иногда мне нужно добавить toArray() в конце get(), потому что моя функция ожидает массив. Разве другие методы также не производят массивы?

54
Halnex
  1. find($id) принимает идентификатор и возвращает одну модель. Если подходящей модели не существует, возвращается null.

  2. findOrFail($id) принимает идентификатор и возвращает одну модель. Если подходящей модели не существует, выдается ошибка1,.

  3. first() возвращает первую запись, найденную в базе данных. Если подходящей модели не существует, возвращается null.

  4. firstOrFail() возвращает первую запись, найденную в базе данных. Если подходящей модели не существует, выдается ошибка1,.

  5. get() возвращает коллекцию моделей, соответствующих запросу.

  6. pluck($column) возвращает коллекцию только значений в данном столбце. В предыдущих версиях Laravel этот метод назывался lists.

  7. toArray() преобразует модель/коллекцию в простой PHP массив.


Примечание: коллекция это расширенный массив. Он работает аналогично массиву, но имеет много дополнительных функций, как вы можете видеть в документы .

К сожалению, PHP не позволяет использовать объект коллекции везде, где вы можете использовать массив. Например, можно использовать коллекцию в цикле foreach, а передавать ее в array_map - нет. Точно так же, если вы введете подсказку в качестве аргумента array, PHP не позволит вам передать его в коллекцию. В более новых версиях PHP есть типовая подсказка iterable, которая может использоваться для приема как массивов, так и коллекций.

Если вы хотите получить простой массив из коллекции, вызовите его метод all() .


1 Ошибка, генерируемая методами findOrFail и firstOrFail: ModelNotFoundException . Если вы не поймете это исключение самостоятельно, Laravel ответит 404 , чего вы хотите большую часть времени.

128
Joseph Silber

Вся информация от @Joseph Silber является правильной и очень полезной.

Я хочу добавить ответ в список ()

С Laravel 5.2 Метод списка объектов Collection, построителя запросов и Eloquent построителя запросов был переименован в pluck. Подпись метода остается прежней.

1
Nirav Bhoi