【问题标题】:Laravel 5.5 - Handle Error Exception for 'where'Laravel 5.5 - 处理“where”的错误异常
【发布时间】:2019-02-20 11:14:48
【问题描述】:

在 Laravel 5.5 中,我试图处理这样的错误异常...

        try {
            $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
        }

        catch(ModelNotFoundException $e) {

            return Response::json(array(
                'error' => true,
                'status_code' => 400,
                'response' => 'fruit_id not found',
            ));

        }

但这给了我一个“试图获取非对象的属性”错误

对于 findorfail,相同的错误处理可以正常工作,我应该如何为 'where' 语句执行此操作?

【问题讨论】:

  • 检查 $user->fruit->id 是否包含正确的值。试试打印吧。
  • 它没有返回任何结果,我很期待。不过我的问题是如何捕获该错误并返回 JSON 响应
  • 如果你使用catch (\Exception $e),结果会是什么?
  • $user->fruit->id 抛出的异常与 ModelNotFoundException 不同。我不记得是哪个,但很容易检查 - 只需像@Sunil 所说的那样将其更改为\Exception $e,然后通过get_class($e) 检查它是哪种类型并相应地更改行。 :)
  • 错误显示“异常”:“ErrorException”

标签: laravel


【解决方案1】:

我认为您在 try 块的 where 查询中传递了错误的值。

try {
      $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
    }

它是fruit_id 还是只是id,因为您是在水果模型本身上查询它。

【讨论】:

    【解决方案2】:

    感谢我改成的 cmets 中的一些指针

      try {
            $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
        }
    
        catch(\Exception $e) {
    
            return Response::json(array(
                'error' => true,
                'status_code' => 400,
                'response' => 'fruit_id not found',
            ));
    
        }
    

    现在一切正常,我发现了正确的异常

    【讨论】:

      【解决方案3】:

      在 Laravel 5.7 上测试

      try {
          $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
      }
      
      catch(\Exception $e) {
      
          abort(404);
      
      }
      

      【讨论】:

      • 请解释你的答案。
      【解决方案4】:

      即使你成功了,我还是想提一下 Laravel 的 Exception Handler

      report method 允许您捕获任何异常类型并自定义您希望如何处理和前进。还有一个报告助手功能,可以全局访问。

      此外,reportable and renderable 例外允许您创建和自定义您的回复。

      【讨论】:

        【解决方案5】:

        试试下面的代码:

        if ($user->fruit) {
            try {
                $fruits = Fruit::where('fruit_id', $user->fruit->id)->get();
            } catch(\Exception $e) {
                return Response::json(array(
                    'error' => true,
                    'status_code' => 400,
                    'response' => 'fruit_id not found',
                ));
            }
        } else {
            return "User Fruit doesn't exists!!";
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-03-29
          • 1970-01-01
          • 2015-01-05
          • 2014-04-22
          • 2012-09-15
          • 2011-04-03
          相关资源
          最近更新 更多