Okey,所以我创建了一个到用户配置文件的链接。我的控制器是这样的:
public function show($id)
{
$user = User::whereId($id)->User::whereUsername($username)->whereActivated(true)->first();
$user->access_counter++;
$user->save();
$this->title($user->username);
$this->pageView('users::show', compact('user'));
}
我的路由文件如下所示:
ModuleRoute::get('users/{username}', 'UsersController@show');
然后我去了地址:default.com/users/test,我得到了错误:没有模型[Models''User]的查询结果。
这就是问题所在?谢谢你的回答!
这里的问题是,您的控制器正试图使用{id}查找用户,而路由正试图使用{username}查找他们。
解决方案1:在控制器中的显示方法中,尝试通过用户名找到用户,并对代码进行一些调整,类似于以下内容:
public function show($username)
{
$user = User::whereUsername($username)->whereActivated(true)->first();
$user->access_counter++;
$user->save();
$this->title($user->username);
$this->pageView('users::show', compact('user'));
}
解决方案2:
您可以更改app/Providers/RouteServiceProvider.php的引导方法:
public function boot( Router $router )
{
parent::boot( $router );
$router->bind( 'username',
function ( $username )
{
return 'App'User::where( 'username', $username )->firstOrFail( );
}
);
}
然后,您可以在控制器的显示方法中键入提示用户模型作为参数
public function show( App'User $user )
{
return view('users.show', compact('user'));
}
Laravel将在指定{username}
占位符的任何路径中自动为您绑定用户模型和给定的用户名,并在控制器的方法中键入hint。
如果绑定,则不必手动执行findOrFail()或where用户名()。
如果遇到未提交更改的问题,请尝试执行以下操作:CCD_ 2&php artisan optimize --force