这些方法有什么区别:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
我一直在使用它们,每个人都会给出不同的结果,有时我需要在toArray()
的末尾添加get()
因为我的函数需要一个数组。不知道其他方法产生数组吗?
答案 0 :(得分:127)
find($id)
获取ID并返回单个模型。如果不存在匹配的模型,则返回null
。
findOrFail($id)
获取ID并返回单个模型。如果不存在匹配模型,则会抛出错误 1 。
first()
会返回在数据库中找到的第一条记录。如果不存在匹配的模型,则返回null
。
firstOrFail()
会返回在数据库中找到的第一条记录。如果不存在匹配模型,则会抛出错误 1 。
get()
会返回与查询匹配的模型集合。
pluck($column)
只返回给定列中的值的集合。在以前版本的Laravel中,此方法称为lists
。
toArray()
将模型/集合转换为简单的PHP数组。
注意: a collection是一个增强的阵列。它的功能与数组类似,但具有许多附加功能,如the docs中所示。
不幸的是,PHP并不允许您在任何可以使用数组的地方使用集合对象。例如,在foreach
循环中使用集合是可以的,将其传递给array_map
则不行。同样,如果你键入一个参数为array
,PHP就不会让你传递一个集合。较新版本的PHP具有iterable
类型提示,可用于接受数组和集合。
如果您想从集合中获取普通数组,请调用其all()
方法。
1 findOrFail
和firstOrFail
方法引发的错误是ModelNotFoundException
。如果你自己没有抓住这个例外,Laravel will respond with a 404,这是你大部分时间都想要的。
答案 1 :(得分:1)
@Joseph Silber提供的所有信息都是正确的,而且非常有用。
我想为list()添加一个答案
从Laravel 5.2开始,Collection,查询构建器和Eloquent查询构建器对象上的list方法已重命名为pluck。方法签名保持不变。