前提・実現したいこと
Laravelを用いて商品検索システムのようなものを作っています。
店名(shops)と支店名(branches)を一対多で対応させ,支店名(branches)と商品(items)を多対多で対応させる以下のような構成をとっています。
検索ボックスから商品名を入力して,商品→支店名→店名と対応するものをすべて辿って一覧表示させたいと考えています。
↓イメージ
発生している問題
検索ボックスに入れた商品名から,対応する支店名群,店名群のオブジェクトをそれぞれ取り出すことまでは出来たのですが,
これらのオブジェクトを同時に対応させながら回して表を出力するということがどうしてもできませんでした。
そもそも,1つのクエリからオブジェクトが2つ出る状況というのがありえるのかも分かっていないため,アドバイスを頂ければと思っています。
該当のソースコード
【myController.php】(コントローラ)
php
1public function search(Request $request) { 2 $query = $request->input('search'); // 受け取った商品名 3 4 $item = new item; 5 // 商品名に対応する支店名 6 $branches = item::where('name', $query)->first()->branches; 7 // 商品名に対応する店名 8 //(リレーションで簡単に書けそうですが,上手く書けなかったのでjoinを使ってます) 9 $shops = item::where('items.name', $query) 10 ->select('items.id as iid', 'items.id as sid') 11 ->join('branch_item', function ($join) { 12 $join->on('items.id','=','branch_item.item_id'); // 商品名と中間テーブルの結合 13 }) 14 ->select('branches.id as bid', 'branches.name as bname') 15 ->join('branches', function ($join) { 16 $join->on('branch_item.branch_id','=','branches.id'); // 中間テーブルと支店名との結合 17 }) 18 ->select('shops.id as sid', 'shops.name as sname') 19 ->join('shops', function ($join) { 20 $join->on('shops.id','=','branches.shop_id'); // 支店名と店名の結合 21 }) 22 ->get(); 23 return view('result', ['branches' => $branches, 'shops' => $shops]); 24}
【result.blade.php】(ビュー, 検索結果)
php
1<table> 2 <thead><th>shop</th><th>branch</th></thead> 3 4 <tbody> 5 @foreach ($branches as $branch)<!-- 店名も回したい --> 6 <tr> 7 <td>{{ ↓に対応する店名を入れたい }}</td> 8 <td>{{ $branch->name }}</td> 9 </tr> 10 @endforeach 11 </tbody> 12</table>
試したこと
配列に変換してarray_map()を利用し,再びオブジェクトに変換するなども試みましたが,
<?php echo e((object)$shop->sname); ?> >>Trying to get property of non-object
のようなエラーが出てしまいました。
補足情報(FW/ツールのバージョンなど)
OS:Windows10
Apache 2.4.38
PHP Version 7.1.26
Laravel Framework 5.8.4
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/03/18 09:02
退会済みユーザー
2019/03/18 09:06