Php 从单击的用户中选择所有图像

Php 从单击的用户中选择所有图像,php,laravel,Php,Laravel,我最近开始学习Laravel 5.4版,但我有一些错误,到目前为止我还没有找到答案。我正在尝试创建用户友好的URL,并通过用户名而不是ID加载用户的图像 到目前为止,我已经在我的控制器上实现了这一点 public function author(User $author) { $authorName = $author->username; $image = $author->with('author')->latestFirst()->paginat

我最近开始学习Laravel 5.4版,但我有一些错误,到目前为止我还没有找到答案。我正在尝试创建用户友好的URL,并通过用户名而不是ID加载用户的图像

到目前为止,我已经在我的控制器上实现了这一点

public function author(User $author) {

    $authorName = $author->username;

    $image = $author->with('author')->latestFirst()->paginate($this->limit);                          

    return view("author", compact('image', 'authorName'));

}
这是我的路线

Route::get('/author/{author}', [

    'uses' => 'HomeController@author',
    'as' => 'author'
]);
这是我的链接

<a href="{{ route('author', $categoryImage->author->username ) }} ">{{ $categoryImage->author->username }}</a>
和用户模型

public function images()
{
    return $this->hasMany(Image::class);
}
无论我点击什么链接,我总是会得到这个错误

没有模型[App\User]的查询结果

我甚至不确定我的控制器和路由是否正确。

这应该可以解决问题

将其放入您的用户模型中:

public function getRouteKeyName()
{
    return 'username';
}

因为默认情况下,Laravel期望column
id
作为标识符,而您期望column
username
作为标识符。基本上,假设您转到url/author/devk,幕后Laravel将执行
User::where('id','=','devk')->first()
。显然,这不会返回任何内容。但为什么在我的模型中有函数时会这样呢?我说的是哪列
公共函数author()
,或者这不重要?您的
author()
函数(在图像模型中)刚刚定义了一个关系。它告诉laravel,
Image
model有一个外键连接到model
User
。这是一种获取图像“作者”的便捷方式。这与路由模型绑定无关。嗯,实际上这是可行的。非常感谢。如果我理解正确的话,这个
getRouteKeyName
是一个内置函数,它从route中获取参数,对吗?它告诉routes要检查哪个列(默认情况下,laravel期望这样的路由:/author/{id})。我理解。谢谢你的帮助。很乐意帮忙:)
public function getRouteKeyName()
{
    return 'username';
}