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]的查询结果。
这个问题?谢谢你的回答!
答案 0 :(得分:0)
问题在于您的控制器正在尝试使用{id}查找用户,并且路由正在尝试使用{username}查找用户。
解决方案1: 在控制器的show方法中,尝试按用户名查找用户并稍微调整一下代码,如下所示:
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( );
}
);
}
然后你可以在控制器的show方法中键入提示用户模型作为参数
public function show( App\User $user )
{
return view('users.show', compact('user'));
}
Laravel将在您指定{username}
占位符的任何路径中自动为用户模型绑定给定的用户名,并在控制器的方法中键入提示。
如果你绑定,那么你不必手动执行findOrFail()或whereUsername()。
如果您遇到未提交更改的问题,请尝试执行以下操作:
php artisan route:cache
& php artisan optimize --force