Pet*_*Amo 4 php laravel eloquent route-model-binding laravel-8
我有一条如下所示的路线。
Route::get('/articles/{articleSlug}' ,
[App\Http\Controllers\ArticleController::class, 'single']);
Run Code Online (Sandbox Code Playgroud)
single()
at类的方法ArticleController
如下:
public function single($slug)
{
$article = Article::where('slug',$slug)->first();
$article->increment('viewCount');
return view('home.article',compact('article'));
}
Run Code Online (Sandbox Code Playgroud)
现在我希望使用路由模型绑定根据articles
列从表中查找此数据slug
。但据我所知,路由模型绑定是根据id查找数据的。那么如何将路由模型绑定查找数据从仅更改id
为slug
仅用于ArticleController.php
(意味着其他控制器类可以使用 id 作为路由模型绑定)?
如果您想使用其他模型字段作为出价属性,id
您可以定义一个getRouteKeyName
返回必须使用的字段名称的字段
class Article extends Model {
// other methods goes here
public function getRouteKeyName() {
return 'slug';
}
}
Run Code Online (Sandbox Code Playgroud)
或者你可以在定义路由时直接传递字段名称,如下所示
Route::get('/articles/{article:slug}' , [App\Http\Controllers\ArticleController::class, 'single']);
Run Code Online (Sandbox Code Playgroud)
使用控制器内的此代码,您必须确保路由定义中作为参数提供的名称与参数的名称controller
匹配
public function single(Article $article)
{
$article->increment('viewCount');
return view('home.article',compact('article'));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2708 次 |
最近记录: |