次の列 (価格、特別オファー、セールの有無) を含むテーブルがあります。
リーリー商品を「価格」で並べ替えて取得したいのですが、「is_special」列が true の場合は、「special_price」列を選択します。
次の結果が必要です。
リーリー生の SQL では、
のようになります。 リーリーLaravel を使用していて、クエリビルダーを並べ替えて結果を取得したいと考えています。
たとえば、仮想プロパティを使用してこれを実行しました
リーリー次に、コレクションを並べ替えます$products->sortBy('current_price')
ですが、今回は結果にクエリ ビルダーを取得したいと考えています。
クエリ ビルダーは仮想プロパティを使用できません。
「価格」と「数量」の 2 つの列で複数の並べ替えを試してみました。 リーリー
「数量」と「価格」という 2 つのフィルターがあります。この複数の並べ替えでは、製品を価格で並べ替えてから、すべての製品を「数量」で並べ替えたいと考えています。 qty == 0 の製品は、qty > 0 のすべての製品の後に続く必要があります。
###私を助けてください。
P粉2079697872023-09-23 10:17:23
クエリ ビルダーにはアクセサーがないため、それを選択する必要があります:
リーリーPS: データベースで並べ替えることをお勧めします。製品に paginate
がある場合、返されたページ データのみが並べ替えられることを考慮してください。
qty > 0
AS 1、qty = 0
AS 0、降順で並べ替えます:
要求された順に並べ替えます 価格
要求された数量で並べ替えます 数量
したがって、製品は qty > 0
を qty = 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'))