LoginSignup
0

More than 1 year has passed since last update.

Laravel 国籍を登録してそれ用のページを作る

Posted at

Laravel.6においてレシピアプリを開発中です。

国別のユーザーごとのレシピを表示する機能を実装し、苦戦したので自分用にメモします。

前提として、usersにnational_idというカラムを持ちユーザー登録時にプルダウンで国籍が登録されるようにしています。

ルーティングを定義

web.php
Route::get('/recipes/{country_key}','RecipeController@country')->name('recipes.country');

Viewにプルダウンを表示

recipes/index.php
<form class="form-group" method="GET">
        @csrf
    <select type="text" class="form-control" name="national_id"  onChange="location.href=value;">
    @foreach(config('country') as $key => $value )
        <option value="{{ route('recipes.country',['country_key' => $key]) }}">{{ $value }}</option>
    @endforeach
    </select>
    </form>

ここでうまいことリンクに飛ばなくて苦戦。。。
aタグは使えてもforeachでうまく回せなさそうだったのでJSのonChangeを使って、optionのvalueをforeachで回してそれをonChangeでとってくるイメージ!

国の登録

config/country.php
<?php 
return array(
  '0' => '未選択',
  '1' => 'アイスランド', 
  '2' => 'アイルランド', 
  '3' => 'アフガニスタン', 
  '4' => 'アメリカ合衆国',
  '5' => 'アラブ首長国連邦', 
  '6' => 'アルゼンチン', 
  '7' => 'イギリス', 
  '8' => 'イスラエル',
  '9' => 'イタリア', 
  '10' => 'イラク', 
  '11' => 'イラン', 
  '12' => 'インド',
,,,以下略108か国登録

コントローラーで実装

RecipeController.php
 public function country(Request $request,$key)
    {   $key = $request->route('country_key');
        $users= User::where('users.national_id','=',$key)->get();
        $user = \Auth::user();
        return view('recipes.country',[
            'title' => '各国のレシピ', 
            'key' => $key,
            'users' => $users,
            'user' => $user,
        ]);
    }

$keyを飛んできたrouteからとってきて、userのnational_idと国のidが一致するユーザーを表示する。
そのユーザーのレシピやらレシピの詳細をbladeで表示させる予定。
この辺はとりあえず作ったので今後いじっていく。

感想

最初Seederでやろうと頑張ったが、断念。
configの便利さに感動しました。

初心者なのでまだまだ改善点はありそうですが、ひとまず実装できました。

意見、感想、改善点等あればよろしくお願いいたします。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0