Laravelでの開発中に、編集画面のフォームで2つ以上のテーブルから取り出しているinputタグの箇所がありました。
submitをした後、それぞれのテーブルのカラムにデータを入れたいと思っていますが、
controllerでどのようにテーブル別に区分けして処理をしたかについて記載します。
今回はこちらのケースとなります。
・usersテーブル。
・hogesテーブル。usersテーブルと1対1で繋がっている。
・fugasテーブル。usersテーブルと1対1で繋がっている。
hogesとfugasにはnameというカラムがあるとしましょう。
blade部分はこのようにします。(formの中のところです)
<div class="input-block">
<label class="input-label">ほげテーブルの名前</label>
<input type="text" name="hoge[name]" value="{{ $user->hoge->name }}">
</div>
<div class="input-block">
<label class="input-label">ふがテーブルの名前</label>
<input type="text" name="fuga[name]" value="{{ $user->fuga->name}}">
</div>
bladeでのポイントは、name属性の所で配列にしておくことです。
こうしておくことで、コントローラー側でrequestを受け取ると、
hogeとfugaとの配列で分かれて取り出すことができます。
こちらはupdateのメソッドです。
(もう少し行数をスッキリできそうというツッコミはここでは無しにしてください…)
$request =$request->all();
$user = Auth::user();
$hoge = $user->hoge;
$hoge->fill($request['hoge'])->save();//ここでhogeの配列のみを取得
$fuga = $user->fuga;
$fuga->fill($request['fuga'])->save();//ここでfugaの配列のみを取得
fillの記載のある行の通り、request変数で配列を指定することで、
formから送られてきたrequestの欲しい配列分のみを取得し、そのままfillとsaveができるようになっています。
上の例ではfillの引数に$requestの配列を入れてるので、name属性の名前はカラム名と合わせるようにしています。(カラム名=>postした値 でそのままfillするイメージです)
結構シンプルにできたので、$requestからテーブル名に取り出したい時に試してみてください!
コメント