【问题标题】:Laravel Implict Binding got No query results for modelLaravel 隐式绑定没有模型的查询结果
【发布时间】:2017-02-07 07:05:43
【问题描述】:

我想要建议如何处理以及哪种方法最好。 隐式绑定普通绑定方法。

我正在使用 Laravel 路由隐式绑定。当我发布错误的 ID 时,我收到错误 No query results for model 如何在控制器中处理而不是 Exception Handler。现在我完成了异常处理程序,但需要更好的解决方案来处理这个或避免隐式绑定。

//Web.php

Route::delete('/master/user/department/{department}/delete', ['as' => 'master.user.department.destroy', 'middleware' => 'permission:master.user.department.destroy', 'uses' => 'Master\User\DepartmentController@destroy']);

//DepartmentContrller.php

public function destroy(Department $department)
{
        try {
            $department->delete();
            return redirect(route('master.user.department.index'))->with('success', array(' Department Deleted successfully'));
        } catch (Exception $e) {
            return back()->with('criticalError', array($e->getMessage()));
        }
}

//处理程序.php

if ($exception instanceof \Illuminate\Database\Eloquent\ModelNotFoundException)
{
    return redirect()->back()->with('custom_modal', ['Model Not Found Exception', $exception->getMessage()]);
}

以下代码完美运行,我想知道哪种方法最好。 //DepartmentContrller.php

public function destroy($id)
{
        try {
            $department=Department::find($id);
            if($department){
                $department->delete();
                return redirect(route('master.user.department.index'))->with('success', array(' Department Deleted successfully'));
            }
            else{
                return back()->with('criticalError', array('Department is not found.'));
            }
        } catch (Exception $e) {
            return back()->with('criticalError', array($e->getMessage()));
        }
}

【问题讨论】:

  • Laravel find() 将在未找到记录时返回 NULL。您可以使用 is_null() 来检查 find 方法的响应。

标签: php laravel laravel-5 eloquent laravel-routing


【解决方案1】:

上述所有方法都适用于您,但您可以覆盖 elqoent 方法 --find() 以防您使用各自的模型

// Put this in any model and use
// Modelname::find($id);
public static function findOrCreate($id)
{
     $obj = static::find($id);
     return $obj ?: new static;
}

in depth description

【讨论】:

  • 这是真的,当我找不到记录的情况下创建新记录时,如果没有找到记录,我该如何管理异常?
  • Eloquent 查询构建器的 findOrNew() 方法已经这样做了。
【解决方案2】:

这两种方法都有效。您可以根据自己的情况选择适合的方法。

隐式模型绑定可以让您更快地获得代码,但您会放弃一些控制权。

显式(普通)绑定需要编写更多代码,但您可以完全控制如何捕获和处理异常。

仅供参考,如果您坚持使用隐式绑定,ModelNotFoundException 有一个 getModel() 方法,它将为您提供导致异常的模型的名称。这将使您可以更多地自定义异常处理,但仍然无法为您提供与处理发生异常时相同的控制权。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2019-12-04
    • 1970-01-01
    相关资源
    最近更新 更多