Laravel:テーブルをforeachして取得した値をView【 Form:select() 】で使いたい
目次
- 1. foreachして取得した値をView【 {{Form:select()}} 】で使いたい
- 1.1. その1:$jancode[] = array($val->jan => $val->jan)
- 1.2. その2:$jancodes = array_merge($jancodes, array($val->jan => $val->jan))
- 1.3. その3:array_push($janacodes,array($val->jan => $val->jan))
- 1.4. その4:$jancodes[$val->jan] = $val->jan
- 1.5. その5:$jancodes += array($val->jan =>$val->jan)
- 1.6. その6:$jancodes = $jancodes + array($val->jan =>$val->jan)
- 1.7. まとめ
foreachして取得した値をView【 {{Form:select()}} 】で使いたい
必要になる時に忘れていていちいち調べるので備忘録。
Tableを条件抽出してその中の一部をFormのselectに回したいときがあります。
選択肢のvalueに抽出した値を使いたいときどうするか、そんな時の各コードの挙動についてです。
作成したいのは以下の配列です。
1 2 3 4 5 6 7 |
$jancodes = [ '' => string '選択ください', 494601256789102 => 494601256789102, 494601256789304 => 494601256789304, 494601256789405 => 494601256789405 ] |
これをViewで次のように書きます。
1 |
{{Form::select('jan',$jancodes,null)}} |
そうすると次のように出力されます。
1 2 3 4 5 6 |
<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)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#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)すると結果は…。
1 2 3 4 5 6 7 8 9 |
#$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))
これもやりがちですが、求めたい配列にはたどり着きません。
1 2 3 4 5 |
#foreachで値を取り出す ※① foreach($value as $val) { $jancodes[] = array_merge($jancodes,array($val->jan => $val->jan)); } |
var_dump($jancodes)結果。
1 2 3 4 5 6 7 |
#$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))
この書き方も調べるとよく引き当てますが、こいつも不正解です。
1 2 3 4 5 |
#foreachで値を取り出す ※① foreach($value as $val) { array_push($jancodes,array($val->jan => $val->jan); } |
結果はこちら。
1 2 3 4 5 6 7 8 9 |
#$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
もう全部自分で書いて仕舞えという方法です。当然この記載方法なら欲しい配列が手に入ります。
1 2 3 4 5 |
#foreachで値を取り出す ※① foreach($value as $val) { $jancodes[$val->jan] = $val->jan; } |
結果
1 2 3 4 5 6 |
#$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)
この【+=】でつなぐ書き方でも求めたい値を手に入れる事が出来ます。
1 2 3 4 5 |
#foreachで値を取り出す ※① foreach($value as $val) { $jancodes += array($val->jan =>$val->jan); } |
結果
1 2 3 4 5 6 |
#$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の書き方を変えただけなので結果は同じですね。これでも欲しい配列を手に入れる事が出来ます。
1 2 3 4 5 |
#foreachで値を取り出す ※① foreach($value as $val) { $jancodes = $jancodes + array($val->jan =>$val->jan); } |
結果
1 2 3 4 5 6 |
#$jancodes の中身 array (size=4) '' => string '選択ください' (length=18) 4954267155057 => string '4954267155057' (length=13) 4954267155064 => string '4954267155064' (length=13) 4954267155071 => string '4954267155071' (length=13) |
まとめ
まぁ楽なのは【その5】の書き方かなぁ。
つぎは忘れていたという事が無いようにしたいものです。
-
前の記事
MySQL:indexの貼り方には要注意。速度低下の原因はインデックスだった。 2019.11.14
-
次の記事
訪問者のIPアドレスから地域を探ってみた 2019.11.27
コメントを残す