Laravel:テーブルをforeachして取得した値をView【 Form:select() 】で使いたい
foreachして取得した値をView【 {{Form:select()}} 】で使いたい
必要になる時に忘れていていちいち調べるので備忘録。
Tableを条件抽出してその中の一部をFormのselectに回したいときがあります。
選択肢のvalueに抽出した値を使いたいときどうするか、そんな時の各コードの挙動についてです。
作成したいのは以下の配列です。
$jancodes = [ '' => string '選択ください', 494601256789102 => 494601256789102, 494601256789304 => 494601256789304, 494601256789405 => 494601256789405 ]
これをViewで次のように書きます。
{{Form::select('jan',$jancodes,null)}}
そうすると次のように出力されます。
<select class="form-control td_text" name="jan"> <option value="" selected="selected">選択ください</option> <option value="494601256789102">494601256789102</option> <option value="494601256789304">494601256789304</option> <option value="494601256789405">494601256789405</option> </select>
この形はどうすれば作れるか。いつも忘れるんですよね。
その1:$jancode[] = array($val->jan => $val->jan)
#jancode の入っているテーブルから共通コードで抽出する
$itemcode = '1111';
# ※productsの中にjan が含まれているとする
$value = Product::where('mollurl_id',$itemcode)->get();
#$jancodesを初期化
$jancodes = array();
$jancodes = array(''=>'選択ください'); //初期値の投入
#foreachで値を取り出す ※①
foreach($value as $val)
{
$jancodes[] = array($val->jan => $val->jan);
}
これをvar_dump($jancodes)すると結果は...。
#$jancodes の中身
array (size=5)
'' => string '選択ください' (length=18)
494601256789102=> string '494601256789102' (length=13)
494601256789304=> string '494601256789304' (length=13)
494601256789405=> string '494601256789405' (length=13)
494601256789406=>
array (size=1)
494601256789405=> string '494601256789405' (length=13)
なんだ?最後なんかついてるしw 実は何も考えずにいつもコレを書いてしまい、違ったと修正するんですよね。この書き方だと結果は必ず失敗します。
その2:$jancodes = array_merge($jancodes, array($val->jan => $val->jan))
これもやりがちですが、求めたい配列にはたどり着きません。
#foreachで値を取り出す ※①
foreach($value as $val)
{
$jancodes[] = array_merge($jancodes,array($val->jan => $val->jan));
}
var_dump($jancodes)結果。
#$jancodes の中身
array (size=5)
'' => string '選択ください' (length=18)
0 => string '4954267155057' (length=13)
1 => string '4954267155064' (length=13)
2 => string '4954267155071' (length=13)
3 => string '4954267155071' (length=13)
おしいですが、余計なnumberが付いてます。
この最初のコードがFormのvalueになてしまうのでこの方法も上手くいきません。
その3:array_push($janacodes,array($val->jan => $val->jan))
この書き方も調べるとよく引き当てますが、こいつも不正解です。
#foreachで値を取り出す ※①
foreach($value as $val)
{
array_push($jancodes,array($val->jan => $val->jan);
}
結果はこちら。
#$jancodes の中身
array (size=5)
'' => string '選択ください' (length=18)
494601256789102=> string '494601256789102' (length=13)
494601256789304=> string '494601256789304' (length=13)
494601256789405=> string '494601256789405' (length=13)
494601256789406=>
array (size=1)
494601256789405=> string '494601256789405' (length=13)
その1と同じ結果です。
その4:$jancodes[$val->jan] = $val->jan
もう全部自分で書いて仕舞えという方法です。当然この記載方法なら欲しい配列が手に入ります。
#foreachで値を取り出す ※①
foreach($value as $val)
{
$jancodes[$val->jan] = $val->jan;
}
結果
#$jancodes の中身
array (size=4)
'' => string '選択ください' (length=18)
4954267155057 => string '4954267155057' (length=13)
4954267155064 => string '4954267155064' (length=13)
4954267155071 => string '4954267155071' (length=13)
欲しい配列が手に入りました。
その5:$jancodes += array($val->jan =>$val->jan)
この【+=】でつなぐ書き方でも求めたい値を手に入れる事が出来ます。
#foreachで値を取り出す ※①
foreach($value as $val)
{
$jancodes += array($val->jan =>$val->jan);
}
結果
#$jancodes の中身
array (size=4)
'' => string '選択ください' (length=18)
4954267155057 => string '4954267155057' (length=13)
4954267155064 => string '4954267155064' (length=13)
4954267155071 => string '4954267155071' (length=13)
その6:$jancodes = $jancodes + array($val->jan =>$val->jan)
まぁ、その5の書き方を変えただけなので結果は同じですね。これでも欲しい配列を手に入れる事が出来ます。
#foreachで値を取り出す ※①
foreach($value as $val)
{
$jancodes = $jancodes + array($val->jan =>$val->jan);
}
結果
#$jancodes の中身
array (size=4)
'' => string '選択ください' (length=18)
4954267155057 => string '4954267155057' (length=13)
4954267155064 => string '4954267155064' (length=13)
4954267155071 => string '4954267155071' (length=13)
まとめ
まぁ楽なのは【その5】の書き方かなぁ。
つぎは忘れていたという事が無いようにしたいものです。


