find(), findOrFail(), first(), firstOrFail(), get(), list(), toArray()

2022-08-30 06:51:26

这些方法有什么区别:

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

我一直在使用它们,每个结果都给出了不同的结果,有时我需要在最后添加,因为我的函数需要一个数组。其他方法不会也生成数组吗?toArray()get()


答案 1
  1. find($id) 获取一个 id 并返回单个模型。如果不存在匹配的模型,则返回 。null

  2. findOrFail($id) 采用一个 id 并返回单个模型。如果不存在匹配的模型,则会引发错误1

  3. first() 返回在数据库中找到的第一条记录。如果不存在匹配的模型,则返回 。null

  4. firstOrFail() 返回在数据库中找到的第一条记录。如果不存在匹配的模型,则会引发错误1

  5. get() 返回与查询匹配的模型的集合。

  6. pluck($column) 仅返回给定列中值的集合。在以前版本的Laravel中,此方法称为。lists

  7. toArray() 将模型/集合转换为简单的 PHP 数组。


注意:集合是一个增强的数组。它的功能类似于数组,但具有许多附加功能,如您在文档中看到的那样。

不幸的是,PHP不允许你在任何地方使用数组来使用集合对象。例如,在循环中使用集合是可以的,将其传递给不是。同样,如果您将参数键入提示为 ,PHP 将不允许您将其传递给集合。从 PHP 7.1 开始,有可迭代的 typehint,它可以用来接受数组和集合。foreacharray_maparray

如果要从集合中获取纯数组,请调用其 all() 方法。


1 and 方法引发的错误是 ModelNotFoundException。如果你自己没有抓住这个例外,Laravel会用404回应,这是你大多数时候想要的。findOrFailfirstOrFail


答案 2

可能事情发生了变化,但findorFail方法可以分别采用2个参数:和混合/数组参数。不需要传递第二个参数。也就是说,这将起作用:$id$columns

$post = Post::findOrFail([1,2], ['title', 'subtitle']);

如果其中一个失败,则带有消息“模型没有查询结果...' 将被抛出。$idsModelNotFoundException


推荐