ひげめがねプログラム

初心者プログラマーの覚書となんかいろいろ

laravel固定値がきまっているときの連想配列


タイトルが既におかしい。けどちゃんとした処理名がわかんない。
タイトルこんなのに直したほうがいいよって優しき方はコメントください~。
※悪気なくまちがいを書いてる場合があります。

最終目標は

No Name
1
2
3
このようなテーブルをviewで表示したい。Noは固定値で1~3,NameはNoと紐づくものがDBに登録があれば表示する。

こいつのDBのテーブルは【testtable】でカラムは
【number】・・・Noの値登録するとこ
【name】・・・Nameの値登録するとこ
があるとする。
(deleteDateとかupdateDateとかは省く!)

NoもDBからとってくるだけなら楽なんですよねー変数にぶちこんでviewに渡してやればいいもんね。
けど今回はNoの値が固定値になってる場合。さてどうする?('ω')

Controllerの処理(index)

固定値で決まってるNoの配列作る
$nums = ['1','2','3'];
DBからデータを取得する(初回はもちろんデータはない)
$datas = testModel::getTest();
//ここ適当。testModelていうModelにgetTestというfunctionがあるとしてデータを変数$datasに代入する
固定値入れた配列回しながらデータもまわしてくっつける
$arry = [];
foreach($nums as $num){
  foreach($datas as $data){
   if($num == $data->number){
        $arry2 = [];
	$arry2['num'] = $num;
	$arry2['name'] = $data -> name; 
	$arry[$num] = $arry2;
	break; //一個合致するものがあったらifぬける
      }
    }
 }
viewで受け取れるようにrequestにmergeします
request()->merge([
 'arry' => $arry
]);
固定値入れた配列もviewへ渡す
return view('master/test/index')->with([
 'nums' => $nums,
]);

Controllerの処理はおしまい。あとはviewで表示させるだけ。

Viewの処理

<table>
 <tr>
  <th></th>
  <th>No</th>
  <th>Name</th>
 </tr>
 @foreach ($nums as $num)
 <tr>
  <td>{{ $num }}</td>
  <td class="left">{{ Form::text("arry[$num][name]", null, []) }}</td>
 </tr>
 @endforeach
</table>

これで固定値Noも表示ができてデータがるNameも表示されます。
number = 2 で name = かにゃめ のデータがあるとするとこうなる↓

No Name
1
2
3

表示があるということは登録もあるということですが今回は表示のみ。
登録するとき(Controllerへ渡すとき)のNoの取り出し方は・・・隠しフィールドにでも値もっとけばとりだしやすいのではないかな('ω')

<td>{{ Form::hidden("arry[$num][code]", $num,[]) }}</td>

こんな感じで。

Controller側ではviewに渡すときはrequest()にmergeしてるので

$arryDatas = Input::get('arry');

でデータがとれます。

読まなくてもいい余談

こういう時の変数名すごい悩むね。