質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

1回答

2341閲覧

laravel foreachで本来1つだけ作りたいselect boxが複数できてしまうことの解決策

HirakuMorishima

総合スコア29

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/06/25 03:02

編集2019/06/25 20:10

##現状
ControllerでModel(Client.php)から引っ張ってきたデータを、checkClient.blade.phpというビュー上にforeachで展開するというコードを記述しました。

しかし、foreachがselect boxを生み出す<select>タグにまたがっており、Client.phpのカラムの数だけselect boxが生み出されるという形になっています。

(以下は、2つのカラムが挿入されている状態)
イメージ説明

foreachがselect boxを生み出す<select>タグにまたがらないようにすればいいということはわかるのですが、

php

1@foreach($list as $val) 2 <form method="POST" action="/toAddInvoice/{{$val->id}}" id="clients_form"> 3 {{csrf_field()}} 4 <div class="input-field col s12"> 5 <select id="client_id" class="select" name="client_id" onchange="submit(this.form)"> 6 <option value="" disabled selected>クライアントを選んでください。</option> 7 <option value="{{$val->id}}">{{$val->client_name}}</option> 8 </select> 9 <label for="client_id">クライアント</label> 10 </div> 11 </form> 12 @endforeach

というコードを書いており、formのactionの中に入っている{{$val->id}}の数値と、<option>のvalueである{{$val->id}}を同一のものにしたいと考えています。

しかし、@foreach〜@endforeachを2つ作り、<form>タグと<option>タグそれぞれを囲うとなると、formのactionの中に入っている{{$val->id}}の数値と、<option>のvalueである{{$val->id}}を同一のものになりません。(具体的には、formのactionの中に入っている{{$val->id}}の数値が1になってしまいます。)

##叶えたいこと
・select boxを1つだけにし、カラムの分だけのoptionができるようにしたい。
・formのactionの中に入っている{{$val->id}}の数値と、<option>のvalueである{{$val->id}}を同一のものにしたい

どのような修正が必要か教えていただきたいです。
よろしくお願いいたします。

##問題のコード
●checkClient.blade.php(一部抜粋)

php

1@foreach($list as $val) 2 <form method="POST" action="/toAddInvoice/{{$val->id}}" id="clients_form"> 3 {{csrf_field()}} 4 <div class="input-field col s12"> 5 <select id="client_id" class="select" name="client_id" onchange="submit(this.form)"> 6 <option value="" disabled selected>クライアントを選んでください。</option> 7 <option value="{{$val->id}}">{{$val->client_name}}</option> 8 </select> 9 <label for="client_id">クライアント</label> 10 </div> 11 </form> 12 @endforeach

●InvoiceController.php(一部抜粋)

php

1public function checkClient(){ 2 $list = Client::all(); 3 return view('invoice.checkClient', compact('list')); 4 }

●Client.php(一部抜粋)

php

1public function up() 2 { 3 Schema::create('clients', function (Blueprint $table) { 4 $table->increments('id'); 5 $table->integer('user_id')->unsigned(); 6 $table->string('client_name'); //クライアント名 7 $table->string('personnel'); //担当者 8 $table->string('client_tel_number'); //TEL 9 $table->text('client_address'); //住所 10 $table->decimal('sales_tax_rate'); //消費税率 11 $table->decimal('withholding_tax_rate'); //源泉徴収税率 12 $table->integer('tax_category'); //税区分 13 $table->integer('fraction'); //端数処理 14 $table->timestamps(); 15 $table 16 ->foreign('user_id') 17 ->references('id') 18 ->on('users') 19 ->onDelete('cascade'); 20 });

##追記
最終的に以下のようなHTMLができることが理想です。

php

1<form method="POST" action="/toAddInvoice/{{$val->id}}" id="clients_form"> 2 <div class="input-field col s12"> 3 <select id="client_id" class="select" name="client_id" onchange="submit(this.form)"> 4 <option value="" disabled selected>クライアントを選んでください。</option> 5 <option value="1">クライアント1</option> 6 <option value="2">クライアント2</option> 7 <option value="3">クライアント3</option> 8 </select> 9 <label for="client_id">クライアント</label> 10 </div> 11</form>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/06/25 03:07

formを複数作る必要があるのでしょうか
m.ts10806

2019/06/25 03:20

出力結果どのようなHTMLにしたいのか、例示いただけますか?
m.ts10806

2019/06/26 00:42

結局、formを複数作るのかどうかが分からないのですが・・
HirakuMorishima

2019/06/26 00:51

formは1つだけ作りたいと考えています。
m.ts10806

2019/06/26 00:55

では、actionに指定している$val->idは何に利用するために何を入れたいのでしょうか?
guest

回答1

0

option を囲うようにしては?だめでしょうか?

checkClient.blade.php

php

1 <form method="POST" action="/toAddInvoice/{{$val->id}}" id="clients_form"> 2 {{csrf_field()}} 3 <div class="input-field col s12"> 4 <select id="client_id" class="select" name="client_id" onchange="submit(this.form)"> 5 <option value="" disabled selected>クライアントを選んでください。</option> 6@foreach($list as $val) 7 <option value="{{$val->id}}">{{$val->client_name}}</option> 8@endforeach 9 </select> 10 <label for="client_id">クライアント</label> 11 </div> 12 </form>

投稿2019/06/27 08:33

taka2063

総合スコア307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問