find(),findOrFail(),first(),firstOrFail(),get(),list(),toArray()之间有什么区别

Hal*_*nex 68 php laravel laravel-5

这些方法有什么区别

  1. 找()
  2. findOrFail()
  3. 第一()
  4. firstOrFail()
  5. 得到()
  6. 名单()
  7. 指定者()

我一直在使用它们,每个都给出了不同的结果,有时我需要find()在结尾处添加,findOrFail()因为我的函数期待一个数组.其他方法也不会产生数组吗?

Jos*_*ber 157

  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不允许您在任何可以使用数组的地方使用集合对象.例如,在foreach循环中使用集合是可以的,将其传递给array_map不是.类似地,如果你键入一个参数提示array,PHP将不允许你传递一个集合.较新版本的PHP具有iterabletypehint,可用于接受数组和集合.

如果您想从集合中获取普通数组,请调用其all()方法.


1findOrFailfirstOrFail方法引发的错误是a ModelNotFoundException.如果你自己没有发现这个例外,Laravel会回复404,这是你大多数时候想要的.


小智 6

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

$post = Post::findOrFail([1,2], ['title', 'subtitle']);
Run Code Online (Sandbox Code Playgroud)

如果其中之一$ids失败,ModelNotFoundException将抛出消息“没有模型的查询结果...”。