【问题标题】:Laravel Eloquent firstOrFail returns all records in tableLaravel Eloquent firstOrFail 返回表中的所有记录
【发布时间】:2014-10-16 21:25:51
【问题描述】:

我正在尝试在我的 eloquent 模型中检索一行。我想要做的是首先搜索它是否存在或抛出异常。在 Laravel 文档中,它说我可以使用 firstOrFailfindOrFail。雄辩的查询如下:

Game::where('game', 'game-name')->firstOrFail()->remember(60)->get()

这适用于查找记录并在未找到时抛出异常,但它会返回所有行作为结果。我想做的只是返回我搜索过的行。在这个例子中我没有按主键索引,所以 findOrFail 不起作用。

如果我用->first() 替换->get(),它所做的只是返回表中的第一行。它忽略了::where()

编辑:当我删除 ->get()->remember() 它返回了所需的行但是我仍然想缓存查询但是当我在结果上使用 ->remember() 和 print_r 时,整个 eloquent 模型都被丢弃了。

EDIT2:一切都已解决。我总是混淆->remember()的地方。正确的做法是:

Game::where('game', 'game-name')->remember(60)->firstOrFail()

【问题讨论】:

  • 不记得了,是firstfirstOrFailgetfind等,你必须照顾。他们都执行查询并返回collection/model/null(或array)所以实际上您确实运行了您想要的查询,然后调用remember 并使用get 运行另一个查询。

标签: php laravel


【解决方案1】:

一切都解决了。
我总是混淆->remember()的地方。
正确的做法是:

Game::where('game', 'game-name')->remember(60)->firstOrFail()

【讨论】:

    【解决方案2】:

    错误的结果似乎被缓存了,避免使用记住,直到你有正确的查询。 如果你使用 get 它将返回一个 Collection 实例。 findOrFail 期望 id 作为第一个参数。 使用 first 从查询中获取第一个结果,然后检查它是否为空以抛出异常

    Game::where('game', 'game-name')->first();
    

    【讨论】:

    • 请发布您找到的解决方案的答案,并接受您自己的答案。它会帮助别人。
    猜你喜欢
    • 2021-12-04
    • 2019-12-27
    • 1970-01-01
    • 2015-11-05
    • 2021-12-20
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    相关资源
    最近更新 更多