Laravel 隐式路由,使用firstOrCreate代替findOrFail
是否可以创建一个隐式路由,如果找不到它,则创建该对象?我使用的是Laravel 5.5.13 例如,这是我的隐式路线:Laravel 隐式路由,使用firstOrCreate代替findOrFail,laravel,laravel-5,laravel-routing,laravel-5.5,Laravel,Laravel 5,Laravel Routing,Laravel 5.5,是否可以创建一个隐式路由,如果找不到它,则创建该对象?我使用的是Laravel 5.5.13 例如,这是我的隐式路线: Route::post('thumbs/{player}', 'ThumbController@store'); 在我的控制器中是这样的: public function store(Request $request, Player $player) { $thumb = new Thumb($request->all()); $player->t
Route::post('thumbs/{player}', 'ThumbController@store');
在我的控制器中是这样的:
public function store(Request $request, Player $player)
{
$thumb = new Thumb($request->all());
$player->thumbs()->save($thumb);
return response()->json($thumb, 201);
}
现在,如果我转到…/api/thumb/1
的端点,它将创建一个与id1
的Player
相关的thumb。但是,我希望为其提供如下字符串,而不是id号:
..../api/thumb/PLAYER_NAME
Route::bind('player', function ($value) {
if ($player = \App\Player::find($value)) {
return $player;
}
return Player::create(['name' => $value]);
});
例如,
…/api/thumb/Blagoh
,那么我的端点应该首先找到一个名为“Blagoh”的播放器是否存在,如果它不存在,那么它应该创建它。我想不出这一点。您应该做的是在路由服务提供商的引导方法中添加如下内容:
..../api/thumb/PLAYER_NAME
Route::bind('player', function ($value) {
if ($player = \App\Player::find($value)) {
return $player;
}
return Player::create(['name' => $value]);
});
它被称为显式绑定,您可以如上所示更新逻辑 超级酷,非常感谢!\App\Player::find($value)
如何知道如何按名称搜索?@Blagoh它不会-在您的示例中,您显示的值可以是1,在本例中,搜索是按id进行的。如果您想按名称查找,first或create
可能是更好的选择哦,哈哈!谢谢你这么快的回复!:)