这些方法之间有什么区别:
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开始,有iterabletypehint,它可以用来接受数组和集合。
如果要从集合中获取纯数组,请调用其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