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

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

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

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

PHP

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

Q&A

解決済

1回答

2446閲覧

LaravelのFormファサードにおけるselect boxでforeachを使用したい

HirakuMorishima

総合スコア29

Laravel

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

PHP

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

0グッド

0クリップ

投稿2019/06/22 00:16

編集2019/06/22 03:06

##現状・お願い
LaravelのFormファサードにおけるselect boxでforeachを使用したいと考えています。

現状、foreachとFormファサードの兼ね合わせ方が分からず、
htmlのselectboxの書き方で代替しております。

しかし、textフォームなどにLaravelのFormファサードを使用しているためか、
select boxのforeach部分(具体的には「$val->id」「$val->client_name」)でエラーが出てしまいます。

foreachをLaravelのselectにて使用するためには、どのようにコードを記述すればいいでしょうか。

##エラーメッセージ
Trying to get property ‘id’ of non-object (View: /home/ec2-user/environment/invoice_and_todo/resources/views/todo/editItem.blade.php)
イメージ説明

###editItem.blade

php

1@extends('layouts.layout') 2@section('title','案件管理画面') 3 @section('body') 4 <!--サイドメニューここから--> 5 <div class="row"> 6 <div class="col s0 l2"> 7 <ul id="slide-out" class="sidenav sidenav-fixed "> 8 <li><a href="{{url('/user')}}">クライアント一覧<i class="material-icons left">person</i></a></li> 9 <li><a href="#">案件カレンダー<i class="material-icons left">date_range</i></a></li> 10 <li><a href="{{url('/addClient')}}">クライアント追加<i class="material-icons left">add</i></a></li> 11 <li><a href="{{url('addItem')}}">案件追加<i class="material-icons left">add</i></a></li> 12 </ul> 13 </div> 14 <!--サイドメニューここまで--> 15 <div class="col s12 offset-l1 l8"> 16 <nav class="header"> 17 <a href="#" data-target="slide-out" class="sidenav-trigger btn-floating"><i class="medium z-depth-1 material-icons">add</i></a> 18 <h2 class="center-align">案件管理画面</h2> 19 </nav> 20 {{Form::open(['url' => route('editItem',['id'=>$list->id]),'method'=>'POST'])}} 21 {{ csrf_field() }} 22 <div class="input-field col s12"> 23 {{Form::text('item_name', $list->item_name,['class' => 'validate', 'id' => 'item_name'])}} 24 {{Form::label('item_name','案件名')}} 25 </div> 26 <div class="input-field col s12"> 27 {{Form::text('delivery_date', $list->delivery_date,['class' => 'datepicker', 'id' => 'delivery_date'])}} 28 {{Form::label('delivery_date','納期')}} 29 </div> 30 <div class="input-field col s12"> 31 {{Form::text('unit_price', $list->unit_price,['class' => 'validate', 'id' => 'unit_price'])}} 32 {{Form::label('unit_price','納期')}} 33 </div> 34 <div class="input-field col s12"> 35 {{Form::select('states', ['未執筆','執筆済み','納品済み', '請求済み'] , null, ['class' => 'select', 'id' => 'states'])}} 36 {{Form::label('states', 'ステータス')}} 37 </div> 38 <div class="input-field col s12"> 39 <select id="client_id" class="select" name="client_id"> 40 <option value="" disabled selected>クライアントを選んでください。</option> 41 @foreach($list as $val) 42 <option value="{{$val->id}}">{{$val->client_name}}</option> 43 @endforeach 44 </select> 45 <label for="client_id">クライアント</label> 46 </div> 47 <div class="input-field col s12"> 48 {{Form::textarea('memo', $list->memo, ['class' => 'validate', 'id' => 'memo'])}} 49 {{Form::label('memo','備考欄')}} 50 </div> 51 {{Form::submit('案件追加', ['class' => 'waves-effect waves-light btn blue accent-1'])}} 52 {{Form::hidden('client_id', $list->client_id)}} 53 {{Form::hidden('states', $list->states)}} 54 {{Form::close()}} 55 <form method="POST" action="/deleteItem/{{$list->id}}" method="post"> 56 {{ method_field('delete') }} 57 {{csrf_field()}} 58 <input type="submit" value="案件情報削除" class="waves-effect waves-light btn red lighten-1"> 59 </form> 60 </div> 61 </div> 62 @endsection

###Controller(一部抜粋)

php

1// 案件情報の追加・更新・削除 2 public function addNewItem(Request $request){ 3 $item = new Item(); 4 $item->user_id = Auth::user()->id; 5 $item->client_id = $request->client_id; 6 $item->item_name = $request->item_name; 7 $item->delivery_date = $request->delivery_date; 8 $item->unit_price = $request->unit_price; 9 $item->states = $request->states; 10 $item->memo = $request->memo; 11 $item->save(); 12 return redirect('/addItem'); 13 } 14 public function editItem($id){ 15 $list = Item::find($id); 16 return view('todo.editItem', compact('list')); 17 } 18

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

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

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

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

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

m.ts10806

2019/06/22 02:12

次の質問と何かしら関連性があるのでは?というかforeachわざわざ使う必要がないと思うのですが。どういう結果を得たいのでしょうか
guest

回答1

0

自己解決

Contorollerの方で、1レコードしか渡しておらずforeachで回すことができないということに気づきました。

そこで、Controllerとビューを以下のように修正しました。

###ビュー

php

1 <div class="input-field col s12"> 2 <select id="client_id" class="select" name="client_id"> 3 <option value="" disabled selected>クライアントを選んでください。</option> 4 @foreach($itemList as $val) 5 <option value="{{$val->id}}">{{$val->client_name}}</option> 6 @endforeach 7 </select> 8 <label for="client_id">クライアント</label> 9 </div>

###Controller

php

1 public function editItem($id){ 2 $list = Item::find($id); 3 $itemList = Item::all(); 4 return view('todo.editItem', compact('list', 'itemList')); 5 }

上記の変更でエラー画面は表示されなくなったものの、クライアントのselect boxに実際のクライアントネーム($val->client_name、あとおそらく$val->idも)が表示されず。

どなたか解決策を知っていらっしゃる方はお願いいたします。

投稿2019/06/22 02:42

編集2019/06/22 03:03
HirakuMorishima

総合スコア29

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

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

m.ts10806

2019/06/22 03:22 編集

この回答は解決策ではなく自身で試している途中経過ではないでしょうか? 質問に追記されたほうが良いかと思います。(ベストアンサーは解除し、回答は削除依頼をだしてください)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問