这些方法有什么区别:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
我一直在使用它们,每个都给出不同的结果,有时我需要在
toArray()
的末尾添加 get()
,因为我的函数需要一个数组。其他方法不会也产生数组吗?
find($id)
接受一个 id 并返回单个模型。如果不存在匹配模型,则返回 null
。findOrFail($id)
接受一个 id 并返回单个模型。如果不存在匹配模型,则会抛出错误1。first()
返回在数据库中找到的第一条记录。如果不存在匹配模型,则返回 null
。firstOrFail()
返回在数据库中找到的第一条记录。如果不存在匹配模型,则会抛出错误1。get()
返回与查询匹配的模型集合。pluck($column)
返回给定列中值的集合。在 Laravel 的早期版本中,此方法称为 lists
。toArray()
将模型/集合转换为简单的 PHP 数组。注意: 集合是一个增强的数组。它的功能与数组类似,但具有许多附加功能,如您在文档中看到的那样。
不幸的是,PHP 不允许您在可以使用数组的任何地方使用集合对象。例如,在
foreach
循环中使用集合是可以的,但将其传递给 array_map
则不行。同样,如果您将参数键入提示为 array
,PHP 将不允许您向其传递集合。从 PHP 7.1 开始,有 iterable
typehint,可用于接受数组和集合。
all()
方法。
1
findOrFail
和firstOrFail
方法抛出的错误是ModelNotFoundException
。如果您自己没有捕获此异常,Laravel 将响应 404,这正是您大多数时候想要的。
可能事情发生了变化,但 findorFail 方法可以接受 2 个参数:分别是
$id
和 $columns
混合/数组参数。不需要传递第二个参数。也就是说,这会起作用:
$post = Post::findOrFail([1,2], ['title', 'subtitle']);
如果其中一个
$ids
失败,则会抛出带有消息“没有模型查询结果...”的ModelNotFoundException
。
还有 $hsp = MyModel::firstWhere(['M_FK' => $x]);如果找到特定列,则返回第一个模型