Find()、 findOrFail()、 first()、 firstOrFail()、 get()、 list()、 toArray()之间的区别是什么

这些方法有什么不同:

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

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

191629 次浏览
  1. find($id) 接受一个 id 并返回一个模型,如果不存在匹配的模型,则返回 null

  2. findOrFail($id) 接受一个 id 并返回一个模型,如果不存在匹配的模型,则抛出一个 error1

  3. 返回在数据库中找到的第一条记录,如果没有匹配的模型,返回 null

  4. 返回在数据库中找到的第一条记录,如果没有匹配的模型,则抛出错误 1

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

  6. pluck($column) 仅返回给定列中的值的集合。在早期版本的 Laravel 中,这个方法被称为 lists

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


注意: 收藏品是一个增强的数组。它的功能类似于数组,但是有很多附加的功能,正如您在 那些文件中看到的。

遗憾的是,PHP 不允许您在任何可以使用数组的地方使用集合对象。例如,在 foreach循环中使用集合是可以的,但将其传递给 array_map则不行。类似地,如果您将参数输入为 array,PHP 将不允许您传递它一个集合。从 PHP 7.1开始,就有了 iterable打字提示,它可以用来接受数组和集合。

如果您希望从集合中获得一个普通数组,可以调用它的 all()方法。


findOrFailfirstOrFail方法抛出的错误是 ModelNotFoundException。如果您自己没有捕捉到这个异常,Laravel 会回复404,这是您大多数时候想要的。

可能情况发生了变化,但 findorFail 方法可以接受2个参数: 分别是 $id$columns混合/数组参数。不需要传递第二个参数。也就是说,这种方法可行:

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

如果其中一个 $ids失败,将抛出带有消息“ No query result for model...”的 ModelNotFoundException