2017-11-01 16 views
0

暗黙のルートを作成して、それが見つからない場合は作成できますか?私はLaravel 5.5.13を使用しています。暗黙のルート、findOrFailの代わりにfirstOrCreateを使用する

例えば、これは私の暗黙のルートです:

Route::post('thumbs/{player}', '[email protected]'); 

そして、私のコントローラで、それはこれです:私は..../api/thumb/1のエンドポイントに行くのであれば、今では、関連親指を作成します

public function store(Request $request, Player $player) 
{ 
    $thumb = new Thumb($request->all()); 
    $player->thumbs()->save($thumb); 
    return response()->json($thumb, 201); 
} 

idのPlayerである。しかし、代わりに私はそれをこのような文字列を提供したいID番号:..../api/thumb/Blagoh

..../api/thumb/PLAYER_NAME 

だから、例をプレイヤーが名前「Blagoh」で存在している場合、それがない場合は、その後、私の終点は最初に見つける必要がありますそれを作成する必要があります。私はこのことを理解できませんでした。これは、明示的な結合と呼ばれています

Route::bind('player', function ($value) { 
    if ($player = \App\Player::find($value)) { 
     return $player; 
    } 

    return Player::create(['name' => $value]); 
}); 

以上示したように、あなたのロジックを更新することができます。あなたは何をすべき

答えて

1

はこのような何かRouteServiceProviderbootメソッドに追加しています。 Reference - Route model binding

+0

非常にありがとうございます! '\ App \ Player :: find($ value)'は 'name 'で検索する方法をどのように知っていますか? – Blagoh

+1

@Blagohそうではありません - あなたの例では値が1であったことを示しました。この場合、idで検索が行われます。あなたが名前で見たいと思ったら、 'firstOrCreate'はよりよい選択かもしれません –

+0

あああああああ!その速い返信をありがとう! :) – Blagoh

関連する問題