这些方法之间有什么区别:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
我一直在使用它们,但是每个函数都给出不同的结果,有时我需要toArray()
在末尾添加,get()
因为我的函数期望使用数组。其他方法也不会产生数组吗?
这些方法之间有什么区别:
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
我一直在使用它们,但是每个函数都给出不同的结果,有时我需要toArray()
在末尾添加,get()
因为我的函数期望使用数组。其他方法也不会产生数组吗?
Answers:
find($id)
接受一个ID并返回一个模型。如果不存在匹配的模型,则返回null
。
findOrFail($id)
接受一个ID并返回一个模型。如果不存在匹配的模型,则会引发错误1。
first()
返回在数据库中找到的第一条记录。如果不存在匹配的模型,则返回null
。
firstOrFail()
返回在数据库中找到的第一条记录。如果不存在匹配的模型,则会引发错误1。
get()
返回与查询匹配的模型的集合。
pluck($column)
返回仅给定列中的值的集合。在以前的Laravel版本中,此方法称为lists
。
toArray()
将模型/集合转换为简单的PHP数组。
注意: 集合是一个增强的数组。它的功能类似于数组,但具有许多附加功能,如docs中所示。
不幸的是,PHP不允许您在可以使用数组的任何地方使用集合对象。例如,在foreach
循环中使用集合是可以的,但将其传递给array_map
它不是。同样,如果您将参数类型提示为array
,PHP将不允许您将其传递给集合。从PHP 7.1开始,有iterable
typehint,它可以用来接受数组和集合。
如果要从集合中获取纯数组,请调用其all()
方法。
1findOrFail
和firstOrFail
方法引发的错误是ModelNotFoundException
。如果您自己没有捕获到此异常,Laravel将以404响应,这是您大多数时候想要的。
$post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);
以便我可以访问$post->subreddit->moderators->user_id
但可以给Undefined property: Illuminate\Database\Eloquent\Collection::$user_id
我-我可以访问$post->subreddit->moderators
但添加后不能访问user_id
-为什么?
subreddit
是具有moderators
属性的单个模型。moderators
是一个集合,而不是单个模型。您无法直接访问任何内容。您可以根据需要检查第一个:$post->subreddit->moderators[0]->user_id