前提・実現したいこと
「商品」と「店」のテーブルを、中間テーブルを通して多対多でつないでいます。
(厳密にはhasmany<-blongsto->hasmany)
このとき、商品名で検索した際に、商品テーブルでヒットした商品名群(n個)に対応する支店名群(n*m個)の数を数えたいです。
発生している問題
以下のような配列があったとき、Laravelで「branch」の数をカウントするのに簡単な記法などはありますでしょうか。
[{"id":2, "name":"ITEM", "middle":[{"id":2, "shop":{"id":2, "name":"SHOP", "branch":null}, {"id":3, "shop":{"id":4, "name":"\u30bd\u30d5\u30c8\u30d0\u30f3\u30af", "branch":"BRANCH"}]}] [{"id":3, "name":"ITEM2", "middle":[{"id":2, "shop":{"id":2, "name":"SHOP", "branch":null}]}]
該当のソースコード
コントローラー
php
1$query = $request->input('q'); 2 3 if ( $query ){ 4 $items = Item::with('middle.shop', 'middle.information') 5 -> where('name', 'LIKE', "%$query%") 6 -> get(); 7 8 if ( $items ) { 9 $count = //ここの書き方が分からない 10 } else { 11 $count = 0; 12 } 13 return view('result', ['query' => $query, 'count' => $count, 'items' => $items]);
モデル(商品)
php
1public function middle() 2 { 3 return $this 4 ->hasMany('App\Item_Shop'); 5 }
モデル(中間テーブル)
php
1public function item() 2 { 3 return $this 4 ->belongsTo('App\Item'); 5 } 6 7 public function shop() 8 { 9 return $this 10 ->belongsTo('App\Shop'); 11 }
試したこと
foreachでオブジェクトをゴリゴリ回す方法は思いついたのですが、もっとシンプルに書きたいです。
適当に$items->middle->shop->branchなど書いてみたのですが、クエリに対応している商品が単一でないので、やはりうまく動かせませんでした。
補足情報(FW/ツールのバージョンなど)
PHP Version 7.1.26
Laravel Framework 5.8.4
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。