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