首页 > 解决方案 > 为什么模型除了 id 不通过 slug 返回数据?

问题描述

当我尝试通过 slug 而不是通过 id 获取数据时,laravel 视图出现问题。这是我的路线:

Route::get('post/{post}','PostController@post')->name('post');

这是 postController 函数:

public function post(post $post)
{
    return view('user.post',compact('post'));
}

这是模型函数:

public function grtRouteKeyName()
{
    return 'slug';
}

它收到错误 404,但是什么时候在 Route 中进行一些更改:

Route::get('post/{slug}','PostController@post')->name('post');

它返回视图,但不返回我想要的表中的数据。

标签: laravelsluglaravel-6

解决方案


Laravel 的隐式绑定简介

如果/{post}包含一个 id 并且你的表有 id 列,那么 Laravel 会处理它。

如果您希望模型绑定在检索给定模型类时使用 id 以外的数据库列,您可以覆盖 Eloquent 模型上的 getRouteKeyName 方法:

public function getRouteKeyName()
{
    return 'slug';  // db column name
}

在上面的问题中,您需要将方法名称更正grtRouteKeyNamegetRouteKeyName拼写,希望它会起作用。


推荐阅读