Questions tagged «collection»

与Magento系列相关的问题


3
高效的集合调用,筛选和加载
现在,我正在重用foreach循环中嵌套的许多集合。是否可以将这些内容上移几级?目前,Im不得不一遍又一遍地重新加载具有51k +个实体的集合,这大大降低了运行速度。特别是kitinventory集合。 <?php class Codespace_Module_Helper_Item extends other_one{ function functionOne($collection){ ... $data = $collection->getData(); foreach($data as $item){ $this->_functionTwo($item); } ... } function _functionTwo($item){ $model = Mage::getModel('catalog/product'); $id = $model->getIdBySku($item['sku']); $inventoryStatus = Mage::getResourceSingleton('catalog/product')->getAttributeRawValue($id, 'product_inventory_status', 1); $invStatus = $model->getResource()->getAttribute('product_inventory_status')->getSource()->getOptionText($inventoryStatus); if ($invStatus && $id) { if ($invStatus !== 'Z') { $stockItem = Mage::getModel('cataloginventory/stock_item'); $stockItem->setData(array()); …


4
Magento-自定义(非eav)模型,按多个字段加载
我有一个自定义模型和资源模型。我想使用多个字段来加载模型的单个实例。 该模型具有以下字段: id tag_name custom_name group_name 我想基于tag_name,custom_name和group_name而不是id加载此模型。 目前,我正在为每个字段使用集合和addFilter。这行得通,但我想知道Magento中是否有针对此类事物的标准策略? 编辑 核心magento在这种情况下似乎不使用集合,而是在资源模型中使用直接sql查询。 一个例子是: loadByAccountAndDate() 在 Mage_Paypal_Model_Resource_Report_Settlement 当收集似乎是更简洁的方式时,就编写的代码量而言,这是否有原因? 我只是不知道为什么magento选择这样做
15 collection  model 

6
如何在magento 2中打印集合mysql查询?
还有getSelect()->__toString();就是在Magento 1可用于收集打印查询。像下面的例子 $products = Mage::getModel(‘catalog/product’) ->addAttributeToFilter(‘status’, array(‘eq’ => 1)); echo $products->getSelect()->__toString(); magento 2中有什么可用的方法吗?我找到了这个,->printLogQuery(true);但是对我不起作用。 更新:下面是代码。我正在尝试获得畅销产品。它的工作完美,但我想打印查询进行调试。 $this->_collection->getSelect() ->joinLeft( 'sales_order_item', 'e.entity_id = sales_order_item.product_id', array('qty_ordered'=>'SUM(sales_order_item.qty_ordered)')) ->group('e.entity_id') ->order('qty_ordered '.$this->getCurrentDirectionReverse());

5
按非固定属性过滤产品集合
我正在执行以下操作: $productCollection = Mage::getModel('catalog/product') ->getCollection(); $productCollection ->addAttributeToFilter('my_attribute', 1); my_attribute 不在平面表中,但已启用平面表。 我不断获得完整的收藏。 原因似乎在\Mage_Catalog_Model_Resource_Product_Collection::addAttributeToSelect: $columns = $this->getEntity()->getAttributeForSelect($attributeCode); No $this->getEntity()是Mage_Catalog_Model_Resource_Product_Flat获取平面字段的实例-如果找不到,则返回null。 什么是向集合过滤器添加非扁平属性的干净方法? 就我而言,将属性添加到平面表是没有意义的。

1
如何在带有联接查询的magento集合中使用分组依据
在模块的管理网格中,我正在使用此代码来获取集合并将其按客户ID分组 $collection = Mage::getModel('referafriend/statistics')->getCollection(); $collection->getSelect()->group('entity_id'); $this->setCollection($collection); 但是在这里,我必须针对每个客户使用渲染器和过滤器功能来处理客户信息,例如姓名和电子邮件entity_id。我想将客户模型与模块表一起加入。为此,我写了这段代码 $collection = Mage::getModel('customer/customer')->getCollection() ->addNameToSelect(); $collection->getSelect()->join(array('refer' => 'table_name'),'refer.entity_id = e.entity_id' ); $collection->getSelect()->group('entity_id'); $collection->addAttributeToSelect('*'); 但这给了我这个错误 SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'entity_id' in group statement is ambiguous 任何帮助将不胜感激。

2
Magento2集合中的按子句
我有一个自定义集合,向其中添加了过滤器。例如,我有这个: $giftColletion = $this->_giftFactory->getCollection(); $giftColletion->addFieldToFilter('store_id', 1); 我应该在$ giftColletion中添加什么过滤器,以便它可以按ASC顺序按字段位置返回所有记录?

3
自定义页面上的自定义集合的分层导航-magento2
我正在为自己的产品集合在magento2中获取分层导航。我已经在自定义页面上获取了自定义集合,需要显示分层导航。试图适应这种 magento1解决方案,但步伐遥遥无期。 任何想法我怎么能在magento2中实现它。我到目前为止所做的如下: 在我的自定义页面上扩展了Catalog ListProduct块,以获取自定义产品列表。 class View extends \Magento\Catalog\Block\Product\ListProduct { public function __construct( \Magento\Catalog\Block\Product\Context $context, \Magento\Framework\Data\Helper\PostHelper $postDataHelper, \Magento\Catalog\Model\Layer\Resolver $layerResolver, CategoryRepositoryInterface $categoryRepository, \Magento\Framework\Url\Helper\Data $urlHelper, array $data = [], \Custom\LayerNavigation\Model\Layer $testlayerobj ) { parent::__construct($context,$postDataHelper,$layerResolver, $categoryRepository,$urlHelper,$data); $this->_coreRegistry = $context->getRegistry(); $this->_testlayer = $testlayerobj; } protected function _getProductCollection() { if ($this->_productCollection === null) { $this->_productCollection …

1
如何指定产品收集的自定义排序顺序?
我正在尝试基于产品ID数组创建一个产品集合,并根据ID数组对集合进行排序。 $productIds = array(318,310,311); $collection = Mage::getModel('catalog/product') ->getCollection() ->setOrder('entity_id', 'asc') // This will not do the job ->addAttributeToSelect('*') ->addAttributeToFilter('status', 1) ->addAttributeToFilter('entity_id', array( 'in' => $productIds, )); 我想对收集的数据进行排序,因为它们出现在$productIds数组中,318, 310, 311但是上面的代码将返回收集的排序,如310,311, 312。 如果不使用下面给出的简单MySQL查询,是否可以做到这一点? SELECT * FROM catalog_product_entity WHERE entity_id IN (318, 310, 311) ORDER BY FIELD(entity_id, 318, 310, 311);

2
如何在Magento中克隆收藏?
我有一个方法中的一个集合,我想对该集合执行两个不同的操作。因此,我想要同一集合的两个单独的副本,然后将两个集合之一再次分配给原始集合并返回它。 为简单起见,假设我有一个名为的对象集合$collection。 现在,我正在尝试使用PHP克隆,因为我不知道是否有内置的Magento集合克隆。 $coll1 = clone $collection; $coll2 = clone $collection; 现在,我试图对原始集合的这两个单独的克隆执行不同的操作,例如。 $coll1->getSelect()->where('some where condition'); $coll2->getSelect()->where('some different where condition'); if($coll1->count() == 0) { $collection = $coll2; } else { $collection = $coll1; } 但是奇怪的是,这两个克隆的集合都分配了where条件!$ coll1条件与$ coll2的条件一起应用于$ coll2,反之亦然。 有谁知道如何实现这一目标? 谢谢!
12 collection 

4
要在Magento2中向网格添加默认过滤器?
我在管理网格中创建了一个带有标题和状态字段属性的自定义模块。 module_test_grid_block.xml中的网格集合 <arguments> <argument name="id" xsi:type="string">testGrid</argument> <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument> <argument name="default_sort" xsi:type="string">id</argument> <argument name="default_dir" xsi:type="string">desc</argument> <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument> </arguments> 我想显示已启用的数据。是否有任何选项可在管理网格集合中添加默认过滤器? 编辑 <block class="Namespace\Module\Block\Adminhtml\Test\Grid" name="namespace_module_test.grid" as="grid"> <arguments> <argument name="id" xsi:type="string">testGrid</argument> <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument> <argument name="default_sort" xsi:type="string">id</argument> <argument name="default_dir" xsi:type="string">desc</argument> <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument> <argument name="default_filter" xsi:type="array"> <item name="status" …

4
Magento 2:如何通过商店ID筛选产品集合
使用产品工厂对象,我可以创建产品,获取产品集合并获取该集合的第一项 /* var $productFactory \Magento\Catalog\Model\ProductFactory */ $product = $this->productFactory->create()->getCollection()->getFirstItem(); 但是,如果我尝试将store_id添加到集合的过滤器中 $product = $this->productFactory ->create() ->getCollection() ->addFieldToFilter('store_id', 1) ->getFirstItem(); 我收到以下错误 Invalid attribute name: store_id #0 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(1434): Magento\Eav\Model\Entity\Collection\AbstractCollection->_addAttributeJoin('store_id', 'inner') #1 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(359): Magento\Eav\Model\Entity\Collection\AbstractCollection->_getAttributeConditionSql('store_id', 1, 'inner') #2 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Catalog/Model/Resource/Product/Collection.php(1489): Magento\Eav\Model\Entity\Collection\AbstractCollection->addAttributeToFilter('store_id', 1, 'inner') #3 /Users/alanstorm/Sites/magento-2-dev-docs.dev/magento2/app/code/Magento/Eav/Model/Entity/Collection/AbstractCollection.php(382): Magento\Catalog\Model\Resource\Product\Collection->addAttributeToFilter('store_id', 1) ... #63 {main} 如果我尝试使用产品存储库按store_id进行过滤,也会发生相同的事情(存储库使用幕后的集合)。 这是一个错误吗?还是在Magento 2中更改了商店,网站和产品之间的关系,以使其不再是合法查询?都?都不行 还有吗

5
Magento-无法设置收集顺序
这似乎订购不正确,我做错了什么?有什么建议吗? $componentQuantityCollection = Mage::getModel('catalog/product')->getCollection(); $componentQuantityCollection->joinField('qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'); $componentQuantityCollection->addAttributeToFilter('sku', array('in' => $componentSkus))->setOrder('sku','ASC'); 似乎没有排序的另一个集合与第一个集合不同: $kitCollection = Mage::getModel('kitinventory/kitinventory')->getCollection()->addFieldToFilter('kit_sku', $sku)->setOrder('related_sku', 'DESC');

4
加入产品属性的最佳实践
我有一个带有产品参考的自定义表product_id。现在,我想在后端网格中显示产品信息(SKU,名称),但是我不确定这样做的最佳实践是什么? 我的最佳猜测SKU如下: $collection->join( 'catalog/product', 'product_id=`catalog/product`.entity_id', array('product_sku' => 'sku') ) (来自 我的网格块类中方法的代码_prepareCollection() ) 但是产品名称呢?可以在catalog_product_entity_varchar中找到。我的理解是,如果您自己的资源模型和集合是基于的,Mage_Eav_Model_Entity_Collection_Abstract则可以很容易地获得它,因为这样您就可以使用joinAttribute。但是我的模型是基于一个简单的表并从扩展而来Mage_Core_Model_Resource_Db_Collection_Abstract,没有joinAttribute可用的方法。 那么在这种情况下获得产品名称的最佳方法是什么? 感谢您的时间和帮助:-) 更新: 更准确地说,我在谈论我的资源模型和集合。它与仅具有几个属性的简单平面表匹配,例如 entity_id product_id created_at user_id 我的意图是在后端显示一些统计数据: ProductSku Count(ProductSku) MAX(created_at) 据我所知,执行此操作的最佳方法是通过网格块类,而执行的方法是_prepareCollection()。 我的方法如下所示: protected function _prepareCollection() { // Get and set our collection for the grid $collection = Mage::getResourceModel($this->_getCollectionClass()); $collection ->join( 'catalog/product', 'product_id=`catalog/product`.entity_id', array('product_sku' => 'sku') …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.