如何对两列施加排序。在拉拉维尔雄辩中

发布于 2025-01-23 03:24:34 字数 310 浏览 0 评论 0 原文

我的产品表包含这些数据

名称 折扣 价格 _price

我想使用Laravel Oloxent将分类应用于表产品。 discount_price为0,然后分类适用于价格。 discounted_price而不是0,然后排序适用于discount_price。

my product table contains these datas

id name price discounted_price

I want to apply sorting to table product using laravel eloquent. the discounted_price is 0 then sorting apply to price. discounted_price not 0 then sorting apply to discounted_price.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

玩世 2025-01-30 03:24:34

您只需使用雄辩 get()方法来检索所有项目。之后,通过集合和每次迭代进行迭代,检查 discount_price != 0 。如果条件是正确的,只需将一个名为 final_price 的新项目附加到集合中,并具有 discounted_price 的值。否则,用 Price 附加 final_price

最后,使用 sortby()方法,按 final_price

        $products = Product::get();

        foreach($products as $product) {
            if($product->discounted_price != 0) {
                $product->final_price = $product->discounted_price;
            } else {
                $product->final_price = $product->price;
            }
        }

        return $products->sortBy(['final_price','asc']);

在集合排序上进行进一步的参考 - https://laravel.com/docs/9.x/collections#method-sortby

You can simply retrieve all items using Eloquent get() method. After that, iterate through the collection and at each iteration, check if the discounted_price is != 0. If the condition is true, simply append a new item called final_price to the collection, with the value of discounted_price. Else, append the final_price with the price.

Finally, use sortBy() method to sort the collection by the final_price

        $products = Product::get();

        foreach($products as $product) {
            if($product->discounted_price != 0) {
                $product->final_price = $product->discounted_price;
            } else {
                $product->final_price = $product->price;
            }
        }

        return $products->sortBy(['final_price','asc']);

Further reference on collections sorting - https://laravel.com/docs/9.x/collections#method-sortby

隱形的亼 2025-01-30 03:24:34

您可以做到这一点:

$products = Product::all();

return $products->map(function ($product) {
    $isDiscountPrice      = $product->discounted_price !== 0;
    $product->final_price = $product->{$isDiscountPrice ? 'discounted_price' : 'price'};
    return $product;
})->sortBy(['final_price','asc']);

在这种情况下, map> map() Laravel Collection将是一个很好的解决方案!

You can do this :

$products = Product::all();

return $products->map(function ($product) {
    $isDiscountPrice      = $product->discounted_price !== 0;
    $product->final_price = $product->{$isDiscountPrice ? 'discounted_price' : 'price'};
    return $product;
})->sortBy(['final_price','asc']);

In this situation, map() Laravel Collection would be a good solution !

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文