【问题标题】:Check If Model Exists检查模型是否存在
【发布时间】:2016-11-30 08:43:24
【问题描述】:

在 Laravel 中搜索应该是一个非常基本和常见的测试时,似乎对于如何正确检查天气或模型是否存在以及如果存在则对模型执行某些操作存在很多困惑。在通过 stackoverflow、laracasts 和 laravel 文档本身进行搜索时,它变得不再清晰。例如,如果我运行此查询,

$restaurant = Restaurant::find($input["restaurant_id"]);

有各种堆栈溢出帖子让我检查 count(),使用似乎不一致的 exists() 方法,或使用抛出异常的 firstOrFail()。我想要做的就是像上面那样运行一个调用,检查 $restaurant 是否是一个有效的模型,如果是,然后做一些事情。在我的情况下不需要异常,我不想在使用 count() 或 exists() 之类的东西后必须再次运行查询。该文档也没有关于此的有用信息,它允许返回 4 种不同的变量类型,而没有提及哪种情况将触发哪种返回。有没有人对这个话题有很好的了解?

Laravel checking if record exists

Eloquent ->first() if ->exists()

https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Builder.html#method_find

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    在 laravel 文档中关于你的问题非常清楚,find(),first(),get(),如果模型不存在,都返回 null,

       $model = Restaurant::find(111); // or
       $model = Restaurant::where('id',111)->first();
       if(!$model){ //if model not exist, it means the model variable is null
        }
    

    【讨论】:

    • 我很欣赏这个答案,但这是在文档中的什么地方?我在任何地方都找不到它。同样在您的示例中, where() 仅在您使用 first() 时才返回 null?
    【解决方案2】:

    你也可以使用

    $restaurant = Restaurant::findOrFail($input["restaurant_id"]);
    

    有时,如果找不到模型,您可能希望抛出异常。这在路由或控制器中特别有用。 findOrFail 和 firstOrFail 方法将检索查询的第一个结果。但是,如果没有找到结果,则会抛出 Illuminate\Database\Eloquent\ModelNotFoundException:

    发件人:https://laravel.com/docs/5.1/eloquent

    【讨论】:

    • OP 在他的问题“在我的情况下不需要例外”中指出,因此这个答案对 OP 没有帮助
    【解决方案3】:

    您无需运行任何其他查询。如果记录不存在,find() 将返回 null。您可以只使用一个简单的 if 来检查:

    if($restaurant = Restaurant::find($input["restaurant_id"]) {
        // Do stuff to $restaurant here
    }
    

    【讨论】:

    • 谢谢艾恩伯。我的代码存在问题,导致我看不到这一点。
    猜你喜欢
    • 2017-12-21
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多