在电子商务 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.
我正在尝试展示像亚马逊这样的特色产品,即顶部有两个特色产品,中间有两个,底部有两个,它们之间有 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.