在电子商务 Web 应用程序中使用 laravel 查询显示特色或赞助产品,如亚马逊

show featured or sponsored products like amazon using laravel query in e-commerce Web App

我正在尝试展示像亚马逊这样的特色产品,即顶部有两个特色产品,中间有两个,底部有两个,它们之间有 non-featured/normal 个产品(就像亚马逊一样)。我有一个在产品 table 中有特色的字段,如果它的特色或非特色,其值为 true 或 false。无法找到编写相同查询的方法。是否可以使用单个查询来完成?

我还必须使用上面的分页和排序。

if (request()->sortBy && request()->sortBy === 'featured') {
            $usIt = $query;
            $featuredProducts = $usIt->where('featured', 1)->inRandomOrder()->paginate(6);
            $simpleProducts = $usIt->where('featured', 0)->paginate(6);

            $count = count($featuredProducts) + count($simpleProducts);
            if ($count === 12) {
                $payload = $this->sortByFeatured($featuredProducts, $simpleProducts);
            } else {
                $payload = $query->paginate(12);//todo:fix this gives empty data
            }
        } else {
            $payload = $query->paginate(12);
        }

private function sortByFeatured($featuredProducts, $simpleProducts)
    {
        $data = [];
        array_push($data,
            $featuredProducts[0], $featuredProducts[1],
            $simpleProducts[0], $simpleProducts[1], $simpleProducts[2],
            $featuredProducts[2], $featuredProducts[3],
            $simpleProducts[3], $simpleProducts[4], $simpleProducts[5],
            $featuredProducts[4], $featuredProducts[5],
        );
return $data;
}

我想做的是进行两个查询,一个是随机特色产品,另一个是普通分页产品,并将特色产品放在分页普通产品的顶部中间和底部。但我认为我没有以正确的方式做这件事。请guide/help.

我认为您应该有一个单独的 collection 特色产品,而在 blade 中您应该有不同的部分。我没有完全理解你的代码,所以让我提供一个简化的解决方案,以便你可以处理它。

$items = 12;

$products = Product::where('is_featured, 0)->paginate($items);

// I don't remember the key of items in the paginated collection.
// It's probably data, but you can find it, if it isn't.
$products->data = $product->data->chunk($items/2);

$featured = Product::where('is_featured, 1)->limit(6)->get()->chunk(2);

在blade

<div class="featured--top">
    @foreach($featured[0] as $product)
    ...
    @endforeach
</div>
<div class="main--top">
    @foreach($products[0] as $product)
    ...
    @endforeach
</div>
<div class="featured--center">
    @foreach($featured[1] as $product)
    ...
    @endforeach
</div>
... and other parts.