在Magento2.4.2中同同时如何获取多个产品信息,即批量获取产品列表。
在这里我将获取产品数据的方法写在Data文件里面以便都可以调用。
app/code/Yaoli/PromotionalPage/Helper/Data.php
<?php /** * Created By : yshuq * Date : 2021/12/03 */ namespace Yaoli\PromotionalPage\Helper; use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory; use Magento\Framework\App\Helper\AbstractHelper; use Magento\Framework\App\Helper\Context; use Magento\Framework\App\ObjectManager; use Magento\Framework\UrlInterface; class Data extends AbstractHelper { /** * @var CollectionFactory */ private $productCollectionFactory; /** * @param CollectionFactory $productFactory * @param Context $context */ public function __construct( CollectionFactory $productFactory, Context $context ) { $this->productCollectionFactory = $productFactory; parent::__construct($context); } /** * @param string $ids * @param string $discount * @param string $coupon * @return array * @throws \Magento\Framework\Exception\NoSuchEntityException */ public function getProductListInfo($ids = '',$discount = '',$coupon = '') { } }
1. 获取产品集合
public function getProductListInfo($ids = '',$discount = '',$coupon = '') { //Load Product Collection $collection = $this->productCollectionFactory->create(); $collection->setPageSize(2); foreach ($collection as $product) { echo "<pre>"; print_r($product->getData()); echo "</pre>"; } die(); }
输出
Array ( [entity_id] => 2 [attribute_set_id] => 4 [type_id] => virtual [sku] => USK00001 [has_options] => 0 [required_options] => 0 [created_at] => 2021-08-20 05:55:46 [updated_at] => 2021-08-30 08:52:19 [is_salable] => 1 [store_id] => 1 ) Array ( [entity_id] => 3 [attribute_set_id] => 4 [type_id] => virtual [sku] => USK00002 [has_options] => 0 [required_options] => 0 [created_at] => 2021-08-20 06:19:33 [updated_at] => 2021-08-30 08:58:20 [is_salable] => 1 [store_id] => 1 )
2. 加载具有特定属性的产品集合
获取商品的名称和sku 属性
public function getProductListInfo() { //Load Product Collection $collection = $this->productCollectionFactory->create(); $collection->addAttributeToSelect(['name','sku']); $collection->setPageSize(1); foreach ($collection as $product) { echo "<pre>"; print_r($product->getData()); echo "</pre>"; } die(); }
输出
Array ( [entity_id] => 2 [attribute_set_id] => 4 [type_id] => virtual [sku] => USK00001 [has_options] => 0 [required_options] => 0 [created_at] => 2021-08-20 05:55:46 [updated_at] => 2021-08-30 08:52:19 [is_salable] => 1 [name] => Anno 1800 - PC [store_id] => 1 )
3. 加载具有所有属性的产品集合:
获取全部产品属性信息
public function getProductListInfo()
{
//Load Product Collection
$collection = $this->productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->setPageSize(1);
foreach ($collection as $product)
{ echo "<pre>";
print_r($product->getData());
echo "</pre>";
}
die();
}
输出
Array
(
[entity_id] => 2
[attribute_set_id] => 4
[type_id] => virtual
[sku] => USK00001
[has_options] => 0
[required_options] => 0
[created_at] => 2021-08-20 05:55:46
[updated_at] => 2021-08-30 08:52:19
[is_salable] => 1
[status] => 1
[visibility] => 4
[quantity_and_stock_status] => 1
[tax_class_id] => 0
[price] => 84.990000
[special_price] => 82.490000
[name] => Anno 1800 - PC
[meta_title] => Buy Anno 1800, Anno Uplay Key - ukeydeal.com
[meta_description] => Buy Anno 1800 key with secure payments and instant email delivery. Download and activate Anno 1800 Key directly from official website.
[image] => /a/n/anno-1800.jpg
[small_image] => /a/n/anno-1800.jpg
[thumbnail] => /a/n/anno-1800.jpg
[options_container] => container2
[url_key] => anno-1800-pc-eu
[msrp_display_actual_price_type] => 0
[gift_message_available] => 0
[swatch_image] => /a/n/anno-1800.jpg
[featured] => 1
[timershow] => 1
[soft_sort] => ANNO 1800
[special_from_date] => 2019-09-16 00:00:00
[news_from_date] => 2012-04-19 00:00:00
[description] => ”法师法师法师“;
[meta_keyword] => Buy Anno 1800 key, buy Anno 1800, Anno 1800 key, Anno 1800 cdkey, Anno 1800 Uplay key, buy Anno 1800 game code, buy Anno 1800 code, Anno 1800 PC key.
[store_id] => 1
)
4.按多个类别获取产品集合:
打印集合查询:
$collection = $this->productCollectionFactory->create();
echo "<br>". $collection->getSelectSql();
echo "<br>". $collection->getSelect()->__toString();
echo "<br>". $collection->getSelect()->assemble();
上面三个方法是等效的,都是输出下面结果
SELECT `e`.* FROM `catalog_product_entity` AS `e`
SELECT `e`.* FROM `catalog_product_entity` AS `e`
SELECT `e`.* FROM `catalog_product_entity` AS `e`