ホームページ  >  に質問  >  本文

Laravel 特別価格条件を使用して価格順に並べ替える

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

リーリー

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

次の結果が必要です。

リーリー

生の SQL では、

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

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

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

リーリー

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

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

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

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

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

P粉030479054P粉030479054363日前1056

全員に返信(1)返信します

  • P粉207969787

    P粉2079697872023-09-23 10:17:23

    最初の質問

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

    リーリー

    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
  • キャンセル返事