【问题标题】:How rewrite DB::select to model with findOrFail in LARAVEL Controller如何在 LARAVEL 控制器中使用 findOrFail 重写 DB::select 来建模
【发布时间】:2021-05-02 06:01:14
【问题描述】:

嗨,我有 REGION 模型,但我不知道如何重写这个 DB::select。我想要 findOrFail 或其他东西,如果我找到这个 slug,我会显示页面,如果没有,我会显示 404

我的 web.php 路由

Route::get('/turnaje/{slug}', [RegionController::class, 'show']);

我的区域控制器

public function show($slug)
{

    $regions = DB::select('select * from regions where slug = ?', [$slug]);
    $regions_list = DB::select('select * from regions');

    return view('tournaments.show', [
        'regions' => $regions,
        'regions_list' => $regions_list,
    ]);
}

【问题讨论】:

    标签: php database laravel routes controller


    【解决方案1】:

    因此您可以将模型用作外观并编写类似的查询。我假设您希望在没有该 slug 的区域时引发异常?

    https://laravel.com/docs/8.x/eloquent#not-found-exceptions

    public function show($slug)
    {
        $regions = Region::where('slug', $slug)->firstOrFail();
        $regions_list = Region::all();
    
        return view('tournaments.show', [
            'regions' => $regions,
            'regions_list' => $regions_list,
        ]);
    }
    

    您可能想要处理ModelNotFoundException

    【讨论】:

    • 我尝试过,但在刀片中出现错误,我添加了其他评论和问题描述
    • 你能用你的错误更新问题吗
    【解决方案2】:

    你有两个选择:

    1. 通过在模型中定义 getRouteKeyName 函数将路由模型绑定表单 ID 更改为 slug:
        public function getRouteKeyName()
        {
            return 'slug';
        }
    
    1. 使用firstOrFail

      Region::where('slug', $slug)->firstOrFail();

    【讨论】:

      猜你喜欢
      • 2018-09-05
      • 2019-11-09
      • 1970-01-01
      • 2017-10-20
      • 2015-05-10
      • 2020-01-08
      • 2014-09-28
      • 2015-10-27
      相关资源
      最近更新 更多