【问题标题】:Laravel findOrFail does not existLaravel findOrFail 不存在
【发布时间】:2019-09-08 11:37:58
【问题描述】:

当我在代码中使用 findOrFail 时,它不起作用

我已经尝试了 find 方法,它可以正常工作

public function show(Question $question, Reply $reply) {
    return $question->replies->findOrFail($reply->id);
}

BadMethodCallException: Method Illuminate\Database\Eloquent\Collection::firstOrFail does not exist. in file

【问题讨论】:

  • 你的函数有 findOrFail 并且你的 Error 有 firstOrFail。有点奇怪!是哪一个?
  • 同意@AhmadKarimi。看起来像$question->replies 会产生一个雄辩的集合,因此您可以使用这个find() 来“通过键在集合中查找模型”。但没有任何findOrFail()firstOrFail() 集合的方法
  • 顺便说一句,你在函数参数中有Reply $reply,那么为什么不只是return $reply
  • @AhmadKarimi 我可能都试过了,但不小心复制了另一个
  • @porloscerrosΨ '因为我想确保回复属于该问题

标签: laravel laravel-5 eloquent


【解决方案1】:

由于replies是一个Question关系,如果使用$question->replies,它会返回一个Illuminate\Database\Eloquent\Collection实例,而findOrFail方法不可用,因为该方法属于Illuminate\Database\Eloquent\Builder类。

如果你想使用findOrFail 来构建你的查询,你必须像这样使用它:

public function show(Question $question, Reply $reply) {
    return $question->replies()->findOrFail($reply->id);
}

但是,正如@porloscerrosΨ 在 cmets 中所提到的,您将 Reply $reply 作为函数中的参数。你可以简单地返回 $reply:

public function show(Reply $reply) {
    return $reply;
}

希望对你有帮助。

【讨论】:

  • 虽然我已经修复了,但感谢您的解释我不想返回“回复”,因为我想确保回复属于该问题,因为我的路线看起来像以下@ 987654330@
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 2019-05-01
  • 2019-01-19
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2018-07-26
相关资源
最近更新 更多