在Laravel 5.7中修改getRouteKeyName

时间:2019-02-14 08:40:26

标签: laravel routes slug

我在结构DB的列中为单个DB定义了子弹。当我在路线中调用该子弹时,能否从其他模型(例如此处的结构)中获取该子弹?

路线为:

localhost:8000/api/singles/firstTest

我在Single模型中定义了getRouteKeyName函数:

public function structure()
    {
        return $this->belongsTo(Structure::class);
    }

public function getRouteKeyName()
    {
        return $this->structure()->select('slug')->first();
    }

1 个答案:

答案 0 :(得分:0)

在您的控制器中,如果您将路由指定为,则将获得firstTest作为路由参数:

Route::get('api/singles/{slug}', 'SomeController@someAction');

然后控制器:

public function someAction(Request $request, $slug)
{
    // Perform validations and policy authorization if required

    $id = Single::whereHas('structure', function ($query) use($slug) {
        $query->where('slug', '=', $slug);
    })->first();

    if(!$id){
        abort(404);
    }

    // Process the data using $id obtained above
}