Laravel5.5で開発しています。
商品マスタの子テーブルとしてメーカーマスタを定義していますが
マスタメンテナンス画面の作り方が、いまいちしっくりしていません。
現状やっていることは、コントローラー内でメーカーを取得して、ビューに渡してセレクトボックスを作っています。
モデルでリレーションを定義しているので、コントローラー内でいちいち取得せずに、もっと簡潔にできないかな?
と思っています。
Laravelの開発もそうですが、フレームワークを利用した開発自体経験がすくないのでできるかどうかすら判断ができません。
どうかご教授願います。
以下に抜粋しているソースを記載します。
モデル
PHP
1class Product extends Model 2{ 3 use SoftDeletes; 4 5 protected $table = 'products'; 6 7 public function maker() { 8 return $this->belongsTo(Maker::class); 9 } 10} 11 12class Maker extends Model 13{ 14 use SoftDeletes; 15 16 protected $table = 'makers'; 17} 18
コントローラー(createのみ)
php
1class ProductController extends Controller 2{ 3 public function create(){ 4 $makers = Maker::query()->get(); 5 return view('products.create')->with(compact('makers')); 6 } 7}
ビュー(maker部分のみ)
php
1<div class="panel panel-default"> 2 <div class="panel-heading">メーカー情報</div> 3 <div class="panel-body"> 4 <div class="form-group"> 5 <div class="col-sm-6"> 6 <label>メーカー</label> {!! Form::select('maker_id',['' => '選択してください']+array_pluck($makers, 'name', 'id') ,old('maker_id'),array('class'=>'form-control','id'=>'maker_id')) !!} 7 </div> 8 </div> 9 </div> 10 </div> 11</div>
どなたも貴重なご意見ありがとうございます。
質問の意図がわかりずらいようなので少し追記いたします。
商品マスタですが、実際はメーカーだけでなく複数の子テーブルと紐付いております。
メーカーだけの場合は、上記のようにコントローラー内でwithでわたすのは1つで済むのですが、これが増えると
下記の用になってしまいます。
この記述がスッキリしないので質問しました。
この記述が無難なのか、普通はもっとスマートな書き方があるのかをしりたいです。
php
1class ProductController extends Controller 2{ 3 public function create(){ 4 $makers = Maker::query()->get(); 5 $hoge1= Hoge::query()->get(); 6 $hoge2= Hoge::query()->get(); 7 $hoge3= Hoge::query()->get(); 8 $hoge4= Hoge::query()->get(); 9 $hoge5= Hoge::query()->get(); 10 11 return view('products.create') 12 ->with(compact('makers')) 13 ->with(compact('hoge1')) 14 ->with(compact('hoge2')) 15 ->with(compact('hoge3')) 16 ->with(compact('hoge4')) 17 ->with(compact('hoge5')); 18 } 19}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。