Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

  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 Ошибка, firstOrFail методами findOrFail и firstOrFail является ModelNotFoundException. Если вы сами не поймете это исключение, Laravel ответит 404, чего вы хотите большую часть времени.

Ответ 2

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

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

Начиная с Laravel 5.2. Метод list в объектах Collection, builder и Eloquent переименован в "pluck". Подпись метода остается прежней.