首页 > 解决方案 > Laravel 条件路由键使用 getRouteKeyName

问题描述

我在表上的主键是id,另一方面,我有一个名称为的列,slug它可以为空,我想通过slug 填充 slug 列而不是 null来设置模型的路由键,否则将其保留为id,我尝试了这些:

public function getRouteKeyName()
{
    if ($this->slug) return 'slug';

    return 'id';
}

问题是$this仅返回该方法上的模型实例,并且不会返回请求中涉及的当前模型,我也尝试过request()->route('post')但没有奏效。

标签: laravel

解决方案


这可能不是最好的方法,但我会这样做:

路线

Route::get('/somepath/{variable}', 'SomeController@index');

控制器

public function index($variable)
{
    $model = Model::where('slug', $variable)->first();

    if (null === $model) {
        $model = Model::where('id', $variable)->first();
    }

    // other logic
}

推荐阅读