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】の書き方かなぁ。

つぎは忘れていたという事が無いようにしたいものです。

\ 最新情報をチェック /

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください