因此,默认情况下,我不需要用户在注册时创建用户名。所以他们的用户名不会被设置,而是他们的UID将是他们的id,而不是像这样的用户名:
/**
* Get the Username
*/
public function getUsernameAttribute()
{
if($this->attributes['username']){
return $this->attributes['username'];
}
return $this->id;
}
因此,只要他们访问具有路由模型绑定的URL,就会获得他们的信息(ID)
但现在让我们说我想使用路由器模型的用户名,以防他们 更新并设置一个用户名,我可以这样做:
/**
* Get the route key for the model.
*
* @return string
*/
public function getRouteKeyName()
{
return 'username';
}
适用于用户名。现在我的问题是,它不再适用于没有用户名(ids)的人,而是寻找用户名:
where username = ?
由于路由模型绑定的工作方式和加载顺序,我无法使用if语句检查其用户名是否存在,因为,laravel如何知道获取ID或用户名。
如果没有创建拉取请求,有没有办法解决这个问题?你们有没有经历过这样的事情?
答案 0 :(得分:1)
如果滚动浏览文档中的getRouteKeyName
部分,则会找到有关自定义分辨率逻辑的部分。
https://laravel.com/docs/5.5/routing#explicit-binding
这允许您指定运行查询模型的查询。 E.g。
// RouteServiceProvider.php
public function boot()
{
parent::boot();
Route::bind('user', function ($value) {
return User::where(function ($query) use ($value) {
return $query->where('id', $value)->orWhere('username', $value);
})
->firstOrFail();
});
}