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

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

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

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

2432閲覧

Laravelでselect joinで取得した結果をbladeに表示できない

Linkey

総合スコア77

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/03/17 07:53

編集2019/03/17 09:37

Laravelを学習しているものです。
マイページでselect joinを使ってイベント応募者情報を取得して結果をbladeに表示させようとしているのですが
以下のエラーとなりうまく行きません。

Invalid argument supplied for foreach() (View: /../home.blade.php)

php

1 $result = DB::table('event_entry as entry')->select('e.event_id', 'entry.entry_user_id', 'info.name') 2 ->join('event as e', 'e.event_id', '=', 'entry.event_id') 3 ->join('user_info as info', 'info.user_id', '=', 'e.event_user_id') 4 ->where('e.event_user_id', '1111')->get();

ユーザー情報テーブル(user_info)

MySQL

1*************************** 1. row *************************** 2 user_info_id: 0001 3 user_id: 1111 4 name: test1 5 age: 22 6 prefecture: 東京 7 pic_file: /storage/images/user1.jpg 8 regist_time: 2019-02-14 01:28:34 9 update_time: 2019-02-14 01:28:34 10*************************** 2. row *************************** 11 user_info_id: 0002 12 user_id: 2222 13 name: test2 14 age: 39 15 prefecture: 東京 16 pic_file: /storage/images/user2.jpg 17 regist_time: 2019-02-14 01:28:34 18 update_time: 2019-02-14 01:28:34 19*************************** 3. row *************************** 20 user_info_id: 0003 21 user_id: 3333 22 name: test3 23 age: 26 24 prefecture: 秋田 25 pic_file: /storage/images/user3.jpg 26 regist_time: 2019-02-14 01:28:34 27 update_time: 2019-02-14 01:28:34 28

イベントテーブル(event)

MySQL

1*************************** 1. row *************************** 2 event_id: 0001 3event_user_id: 1111 4 title: 飲み会 5 regist_time: 2019-02-14 00:52:34 6 update_time: 2019-02-14 00:52:34 7*************************** 2. row *************************** 8 event_id: 0002 9event_user_id: 2222 10 title: 映画鑑賞 11 regist_time: 2019-02-14 00:52:34 12 update_time: 2019-02-14 00:52:34

イベント応募テーブル(event_entry)

MySQL

1*************************** 1. row *************************** 2event_entry_id: id002 3 event_id: 0001 4 entry_user_id: 3333 5 regist_time: 2019-02-22 22:07:22 6 update_time: 2019-02-22 22:07:22

UserController.php

php

1class UserController extends Controller 2{ 3 4 public function showMyPage(){ 5 6 $myID = auth()->user()->user_id; 7 8 try { 9 10 $eventEntry = DB::table('event_entry as entry')->select('u.user_id', 'e.event_id', 'u.name','u.age') 11 ->join('event as e', 'e.event_id', '=', 'entry.event_entry_id') 12 ->join('user as u', 'u.user_id', '=', 'entry.entry_user_id') 13 ->where('e.event_user_id', $myID)->get(); 14 15 return view('home',[ 16 'event_entry_info'=>$eventEntry, 17 ]); 18 } catch (\PDOException $e){ 19 return redirect()->back()->withErrors('DB検索に失敗しました。'); 20 } 21 22 } 23 24}

home.blade.php

php

1(中略) 2<body> 3 @if(isset($event_entry_info)) 4 @foreach($event_entry_info as $member) 5 ユーザー名:{{ $member-> name}} 6 年齢:{{ $member-> age}} 7 @endforeach 8 @endif 9</body>

bladeにて$event_entry_infoの中身を出力したところ以下のような表示となりました。
[{"user_id":3333,"name":"\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc0","age":26}]

foreachの$event_entry_infoの前に(array)をつけるとInvalid argument supplied for foreach()は解消されるのですが、値を表示するところで以下のエラーとなります。
Trying to get property of non-object

$memberをddを使って表示させたところ以下の状態となります。
"[{"user_id":3333,"name":"\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc0","age":26}]"

Laravelに詳しい方がいましたらご回答いただけないでしょうか? よろしくお願いいたします。

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

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

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

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

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

m.ts10806

2019/03/17 09:20

foreachで回している個々の$memberの内容はどうでしょうか。 中身出力はdd()ですよね?
Linkey

2019/03/17 09:38

ddの表示結果を記載しました。
Linkey

2019/03/17 11:08

var_dumpで確認したところ、stringで出力されました。これが原因かと思います。 修正方法は調べています。
tukatter

2019/03/29 02:10

{{ $member-> {{ $member-> name}}}} この記述の「-> name」nameの前にあるスペースって要りますか? スペースを入れて入力したことがないため。 このように項目を指定して取得しているのに ->select('u.user_id', 'e.event_id', 'u.name','u.age') 以下の結果になるというのはなんでだろうと気になりました。 "[{"user_id":3333,"name":"\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc0","age":26}]" 他は問題なさそうです。
guest

回答1

0

ベストアンサー

>foreachの$event_entry_infoの前に(array)をつけると
>Invalid argument supplied for foreach()は解消されるのですが、
>値を表示するところで以下のエラーとなります。

home.blade.php

1(中略) 2<!-- 変更前 --> 3 @foreach($event_entry_info as $member) 4<!-- 変更後 --> 5 @foreach((array)$event_entry_info as $member) 6 7コード

1レコードしか取得しなかった場合は、文字列としてsqlの取得結果を返すため
ループで回すときに配列ではないといわれるため強制的に配列であることを明示することで
エラーにならないようにできます。
複数レコード取得出来た場合は変更前の書き方でもエラーにはならないと思います。
※ご自身で対処されていたので記載の必要はなさそうでしたがとりあえず書いておきます。

Trying to get property of non-object

{{ $member-> {{ $member-> name}}}}
この記述の「-> name」nameの前にあるスペースをなくすといいのではと思いました。

とりあえずうまくいくといいですね。

投稿2019/03/30 06:37

tukatter

総合スコア284

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

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

Linkey

2019/03/31 14:48

ありがとうございます。試してみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問