Questions tagged «collection»

与Magento系列相关的问题

3
Magento 1:性能优化以删除实体
我目前正在尝试改进有关性能的几个模块。 你们中有些人可能知道集合方法的用法,walk()这对于避免直接遍历产品非常有用。 最重要的是,感谢@Vinai,我们也可以使用collection delete()方法。 但是我注意到Magento 1本机文件并不总是使用这些方法中的任何一种进行删除。 一个我见过的最糟糕的代码是massDelete()从方法app/code/core/Mage/Adminhtml/controllers/Catalog/ProductController.php,其中产品在删除之前的循环加载。 foreach ($productIds as $productId) { $product = Mage::getSingleton('catalog/product')->load($productId); Mage::dispatchEvent('catalog_controller_product_delete', array('product' => $product)); $product->delete(); } 因此,我进行了一些性能测试,添加了一些日志记录调用,以检查删除100个产品所花费的时间和内存使用情况。 测试1:walk方法 我用以下代码替换了上面粘贴的原始代码: $collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('entity_id') ->addIdFilter($productIds) ->walk('delete'); 在我糟糕的开发服务器上的结果如下(基于10个测试的平均值): 原始代码:19.97秒,已使用15.84MB 自定义代码:17.12秒,已使用15.45MB 因此,对于100种产品的删除,我的自定义代码加快了3秒,而占用的内存少了0.4MB。 测试2:使用收集delete()方法 我用以下代码替换了原始代码: $collection = Mage::getResourceModel('catalog/product_collection') ->addAttributeToSelect('entity_id') ->addIdFilter($productIds) ->delete(); 和记吹这里的结果: 原始代码:19.97秒,已使用15.84MB 自定义代码:1.24秒,已使用6.34MB 因此,对于100种产品的删除,我的自定义代码加快了18秒,而占用的内存减少了9MB。 如评论中所述,该方法似乎不会触发Magento事件(加载后,删除后),也不会触发索引/缓存刷新。 题 所以我的问题是:Magento核心团队为什么没有使用walk('delete')or事件更好的收集delete()方法而不是循环加载产品(我们都知道这是非常非常糟糕的做法)吗? 主要目标是在开发模块时要注意这些关键点:在某些特殊情况下,不能使用walk/收集delete()方法吗? …

2
Magento 2:按多个类别过滤产品集合(Magento 2.1)
我正在使用Magento 2.1.0,目前在过滤具有多个类别的产品集合时遇到困难。我已经使用了多种方法来使其工作,但是没有成功。 假设: $catalog_ids = [618, 619, 620]; 返回NULL $productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addCategoriesFilter(array('in' => $catalog_ids)); 返回异常:无效的属性名称:category_id $productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_id', array( 'finset' => $catalog_ids )); 返回语法错误或访问冲突 $productCollection = $this->productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('category_ids', array( 'finset' => $catalog_ids )); 关于如何进行这项工作或将某些内容链接到这项工作的任何建议?

2
按子产品属性过滤产品集合
我有分配给子产品的2属性之类的情况 1)person_height_from和2)person_height_to具有DropDown类型属性 仅在子产品中分配,而在母产品中不分配, 我想使用此属性过滤类别页面中的产品集合 喜欢 length = 175 $collection->addAttributeToFilter('person_height_from', array('lteq' => $length)); $collection->addAttributeToFilter('person_height_to', array('gteq' => $length)); 这是否可能只获得类别产品中子产品分配高于值的那些父产品 您的帮助将不胜感激


1
与addFieldToSelect相比,addExpressionFieldToSelect有什么用?
我正在研究Magento,但我不太了解addExpressionFieldToSelectover 的用途是addFieldToSelect什么?我在阅读中的任何地方都找不到答案。据我所知,这似乎是在重写字段名称-但仅当您使用重写传递数组时才如此。如果您知道应该将字段重写为什么,那么为什么不首先使用addFieldToSelect进行操作呢?

2
Magento过滤器收集的创建时间(今天,昨天,星期,小时等)
我有一个自定义集合,希望按创建日期和“昨天”创建的het条目进行过滤 馆藏条目 //dates are set in controller using setCreatedTime(Mage::getModel('core/date')->gmtDate()); 昨天创建(无效) //3 products items Yesterday //below filtering outputs incorrect entries $collection = Mage::getModel('things/things')->getCollection(); 我试过了,但是输出不正确; //thought strtotime('yesterday') would work.. $collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('yesterday')))); $collection->addFieldToFilter('created_time', array('gt' => Mage::getModel('core/date')->date('Y-m-d H:i:s', strtotime('-1 day')))); $collection->addFieldToFilter('created_time', array('from'=> strtotime('-1 day', time()),'to'=> time(),'datetime' => true)); $fromDate = …

1
什么是检查Magento2中是否存在自定义属性的最佳方法
为谨慎起见,我想先检查自定义属性是否存在,然后再尝试以任何方式使用它。我需要检查所有属性集合,而不仅仅是产品集合。我的属性可能存在于客户,产品或我自己创建的自定义模型上。 在magento 1.x中,我将使用以下内容: $attr = Mage::getResourceModel('eav/entity_attribute_collection')->setCodeFilter('specialty')->getFirstItem(); if ($attr->getAttributeId() > 0) { Do some stuff....' 我找不到任何明确执行此类操作的内容

2
产品收集问题-错误的价格数据或未显示缺货商品
我正在根据当前类别检索产品集合。我需要这个集合来包含进货和缺货产品,还需要正确显示定价数据。 我的商店配置为将产品定价存储为含税价格,并在商店正面以包含价格和非专有价格显示价格。 获取集合的代码如下: $category = Mage::registry('current_category'); $_productCollection = Mage::getModel('catalog/product')->getCollection() ->addCategoryFilter($category) ->addAttributeToSelect(['sku', 'name', 'price']) ->addAttributeToFilter('status', 1) ->addAttributeToSort('jump_number', Varien_Data_Collection::SORT_ORDER_ASC); 上面的问题是,使用该getPriceHtml()方法加载价格块时,包含价和排除价都显示为包含价。 经过一番研究,我发现向addFinalPrice()收藏夹中添加一种方法可以使我获得预期的价格-正确的排他价和正确的包含价。 但是,如果包含该addFinalPrice()方法,则我的收藏不再包含缺货的产品。 有没有一种方法可以返回正确的定价数据,并让集合包含可销售和缺货的产品?

4
如何获取缺货的产品集合-与addInStockFilterToCollection()相反?
我需要在两个列表中显示类别的产品-一个用于库存商品,另一个用于缺货商品。 我在用着 Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection() 过滤我的库存商品的产品集合,但是似乎没有等效的方法来过滤缺货的商品-我研究了Mage_CatalogInventory_Model_Stock模型,定义了上述方法。 我已经看到了以下示例,该示例用于检索缺货的产品: $collection->joinField( 'is_in_stock', 'cataloginventory/stock_item', 'is_in_stock', 'product_id=entity_id', '{{table}}.stock_id=1', 'left' ) ->addAttributeToFilter('is_in_stock', array('eq' => 0)); ...但是可以肯定的是,这不仅是实现这一目标的最佳方法,还是最佳方法?

4
加载简单产品集合(有库存和无库存)
将可配置产品的所有“子”产品(包括缺货)加载到集合中时出现问题。 像这样加载产品: $simpleCollection = $configurable->getUsedProductCollection() ->addAttributeToSelect('*') ->addFilterByRequiredOptions(); foreach ($simpleCollection as $simple) { //$simple->getName(); } 会忽略缺货的子产品,这可能是因为未加入价格表的子产品。 有没有加载所有子ID的另一个选项getChildrenIds然后加载每个简单的产品负载?

2
在集合中使用group子句时,网格分页不起作用
我在产品网格上工作,但是其分页或产品计数不起作用(因为它显示的计数错误)。由于我的_preparecollection块的功能如下。我在集合中添加了类别过滤器代码,因此我必须使用group子句来防止相同ID已存在的错误。 protected function _prepareCollection() { $store = $this->_getStore(); $collection = Mage::getModel('catalog/product')->getCollection() ->addAttributeToSelect('sku') ->addAttributeToSelect('name') ->addAttributeToSelect('attribute_set_id') ->addAttributeToSelect('type_id') ->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id=entity_id', null, 'left'); $collection->addAttributeToFilter('category_id', array('in' => array(4,10))) ->distinct(true); $collection->getSelect()->group('e.entity_id'); if (Mage::helper('catalog')->isModuleEnabled('Mage_CatalogInventory')) { $collection->joinField('qty', 'cataloginventory/stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'); } $collection->joinField('position', 'catalog/category_product', 'position', 'product_id=entity_id', null, 'left'); $collection->joinField('websites', 'catalog/product_website', 'website_id', 'product_id=entity_id', null, 'left'); if …

1
如何列出所有用户
作为练习的一部分,我试图在一页上列出我数据库中所有用户的电子邮件。到目前为止,我最接近的是 $user = mage::getModel('customer/customer')->getCollection()->getData(); 退货 array 0 => array 'entity_id' => string '1' (length=1) 'entity_type_id' => string '1' (length=1) 'attribute_set_id' => string '0' (length=1) 'website_id' => string '1' (length=1) 'email' => string 'john.doe@example.com' (length=20) 'group_id' => string '1' (length=1) 'increment_id' => string '000000001' (length=9) 'store_id' => string '1' (length=1) 'created_at' …


3
强制产品收集使用EAV代替平板
在Magento 2中,如何临时禁用平面目录?我有一个与前端商店关联的产品集合,并希望通过EAV表加载它。 我查看了集合如何确定是否应使用平面表,但没有找到将设置注入到任何地方的方法。 在Magento 1中,我将更改“平面目录已启用”的已加载配置值: Mage::app()->getStore($storeId)->setConfig('catalog/frontend/flat_catalog_product', 0); 我还需要这样诉诸于全球状态吗?如果是这样,怎么办?还是有一种更优雅的方式?

3
Magento 2:从集合查询中选择字段
我有以下查询。我只想从表中选择1个字段,而不是全部。 $collection = $this->_collectionFactory->addFieldToFilter('status', 0)->load(); //$collection->getSelect()->column('id'); //$collection->getSelect()->from(['main_table' => $this->getMainTable()], array('main_table.id')); echo $collectionBallotSelect->getSelect()->__toString(); exit; 我只想id从表中选择字段。

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.