Laravel 特別価格条件を使用して価格順に並べ替える
P粉030479054
P粉030479054 2023-09-22 13:06:46
0
1
1134

次の列 (価格、特別オファー、セールの有無) を含むテーブルがあります。

リーリー

商品を「価格」で並べ替えて取得したいのですが、「is_special」列が true の場合は、「special_price」列を選択します。

次の結果が必要です。

リーリー

生の SQL では、

のようになります。 リーリー

Laravel を使用していて、クエリビルダーを並べ替えて結果を取得したいと考えています。

たとえば、仮想プロパティを使用してこれを実行しました

リーリー

次に、コレクションを並べ替えます$products->sortBy('current_price')ですが、今回は結果にクエリ ビルダーを取得したいと考えています。 クエリ ビルダーは仮想プロパティを使用できません。

「価格」と「数量」の 2 つの列で複数の並べ替えを試してみました。 リーリー

「数量」と「価格」という 2 つのフィルターがあります。

この複数の並べ替えでは、製品を価格で並べ替えてから、すべての製品を「数量」で並べ替えたいと考えています。 qty == 0 の製品は、qty > 0 のすべての製品の後に続く必要があります。

###私を助けてください。

P粉030479054
P粉030479054

全員に返信(1)
P粉207969787

最初の質問

クエリ ビルダーにはアクセサーがないため、それを選択する必要があります:

リーリー

PS: データベースで並べ替えることをお勧めします。製品に paginate がある場合、返されたページ データのみが並べ替えられることを考慮してください。


2 番目の質問:

  1. qty > 0 AS 1、qty = 0 AS 0、降順で並べ替えます:

  2. 要求された順に並べ替えます 価格

  3. 要求された数量で並べ替えます 数量

したがって、製品は qty > 0qty = 0 の前に置き、qty > 0 のレコードを価格で並べ替えます。すべての製品は qty で並べ替えられます。qty = 0 のレコードは価格で並べ替えられ、すべての製品も qty:

で並べ替えられます。 リーリー

PS:orderByRaw("if(is_special=0,price,special_price) " .request('price', 'ASC')SQL インジェクションの脆弱性 攻撃。orderBy(DB::raw("IF(is_special=0, 価格,special_price)"), request('price', 'ASC'))

に変更します。
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート