find()、findOrFail()、first()、firstOrFail()、get()、list()、toArray()有什么区别

问题描述 投票:0回答:3

这些方法有什么区别:

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

我一直在使用它们,每个都给出不同的结果,有时我需要在

toArray()
的末尾添加
get()
,因为我的函数需要一个数组。其他方法不会也产生数组吗?

php laravel laravel-5
3个回答
417
投票
  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 7.1 开始,有
iterable
typehint
,可用于接受数组和集合。

如果您想从集合中获取普通数组,请调用其

all()
方法。


1

findOrFail
firstOrFail
方法抛出的错误是
ModelNotFoundException
。如果您自己没有捕获此异常,Laravel 将响应 404,这正是您大多数时候想要的。


7
投票

可能事情发生了变化,但 findorFail 方法可以接受 2 个参数:分别是

$id
$columns
混合/数组参数。不需要传递第二个参数。也就是说,这会起作用:

$post = Post::findOrFail([1,2], ['title', 'subtitle']);

如果其中一个

$ids
失败,则会抛出带有消息“没有模型查询结果...”的
ModelNotFoundException


0
投票

还有 $hsp = MyModel::firstWhere(['M_FK' => $x]);如果找到特定列,则返回第一个模型

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.