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

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

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

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

Q&A

解決済

1回答

3552閲覧

検索結果のコレクションに対する操作(where)を異なる条件で複数回行いたい

Auxo

総合スコア34

Laravel

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

0グッド

0クリップ

投稿2016/07/20 10:33

例えば、Itemモデルがあり、何かしら条件による絞り込みを行った結果があったとします。

php

1$items = Item::where('price', '>', 1000)->get(); 2// exp) $items = 1000件 3// うち、「game」カテゴリーの商品は「100」件 4// うち、「other」カテゴリーの商品は「200」件

この結果($items)はコレクションですので、さらにカテゴリー(category)が「game」のものについて件数が知りたい場合は

php

1$gameStock = $item->where('category', '=', 'game')->count(); 2// exp) $gameStock = 100

このようにする事で、カテゴリーが「game」の件数を取得できます。
但し、この後続けて、カテゴリーが「other」のものについて件数を取得しようとすると、検索条件が追加される形となります。

php

1$gameStock = $item->where('category', '=', 'game')->count(); 2$otherStock = $item->where('category', '=', 'other')->count(); 3// exp) $gameStock = 100 4// $otherStock = 0

その為、条件が「カテゴリーが"game"で且つ"other"の商品」となってしまい、0件となります。

これを、正しく取得するにはどのようにすればよいのでしょうか?
こういった場合では、都度モデルからデータを取得しなおさないといけないのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

queryメンバ変数が再利用されているからですね。
出来るか分かりませんが、以下でどうでしょうか?

$gameStock = $item->getQuery()->where('category', '=', 'game')->count(); $otherStock = $item->getQuery()->where('category', '=', 'other')->count();

できなさそうだったら先にcloneしておく必要があると思います。

投稿2016/07/23 06:23

fagai

総合スコア2158

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

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

Auxo

2016/07/28 03:41

いつもありがとうございます。 お教え頂いた方法では上手くいきませんでしたので、cloneして対応いたしました。 ご助言ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問