Questions tagged «collection»

与Magento系列相关的问题

6
集合上的getSize()和count()之间的区别
我已经多次听到他们都是一样的。但是我面临一个奇怪的问题,在CatalogSearch模块的产品集合中,count()返回正确的产品计数,而getSize()返回零。 所以,基本上这就是我得到的: $collection->count(); //correct count $collection->getSize(); //0 但是我希望getSize()具有正确的计数,因为它决定是否在搜索页面中显示分页和产品。我仅在集合中使用“内部联接”,“左联接”和“位置”条件以更具体。 有什么想法为什么我遇到这个奇怪的问题? 谢谢 更新: 我之前的问题,如何在Magento中克隆收藏?我想对一个集合执行两个不同的操作。第一个集合显示正确的getSize(),但是如果getSize()为零,则删除WHERE子句并给出新的WHERE条件。在这之后,我得到了我期望的正确的原始SQL,并且在MySQL中运行它也提供了一组正确的记录,但是集合上的只有getSize()给出了零计数。 所以基本上我可能需要重新加载集合,因为getSize()占用了旧的计数。说得通?


3
从集合中获取所有ID的最有效方法
过去获取产品集合的所有ID时,我一直getAllIds在该集合上使用,因为我认为这是一种方法,它会阻止数据等的全部收集工作。 但是,实际上我今天看了一下这个方法,它加载了集合并遍历每个项目以获取ID数组。 public function getAllIds() { $ids = array(); foreach ($this->getItems() as $item) { $ids[] = $this->_getItemId($item); } return $ids; } 我的问题是,从集合中仅检索ID字段的最有效方法是什么?
37 collection 

1
关于收集模型和资源模型
我对使用资源模型和集合模型感到困惑。有时,当我看到使用特定属性加载产品的示例时,在某些示例中,它们使用集合模型,有时使用资源模型。 另外,什么时候可以使用特定方法get...以及set...表行名称?喜欢getName,getId。我尝试使用但无法获取值,并且显示错误:“在对象中调用未定义的方法” $product = Mage::getModel('catalog/product') ->loadByAttribute('name', 'product_name'); echo $product->getName(); echo $product->getSku(); 它显示“未定义的方法getSku()” 如果使用var_dump($product),则SKU显示在对象中,但是无法使用getSku()... 获取SKU 。

2
在集合查询上左联接表
我正在执行以下操作以从系统中获取一些订单以进行导出: $orders = Mage::getModel('sales/order')->getCollection() ->addFieldToFilter('status', $statusToExport) ->addFieldToFilter('store_id', $this->processingStoreId) ->addFieldToFilter('updated_at', array('gteq' => date('Y-m-d H:i:s', $lastSyncTime))); 如果订单在我拥有的自定义表中,我需要在不导出的地方添加一些内容entity_id。如果使用的是SQL,则可以执行以下操作: left join myTable as mt on main_table.entity_id = mt.entity_id where mt.entity_id is null 但是我不确定如何修改集合查询来做类似的事情。 注意:我确实尝试过 $orders = $orders->getSelect() ->joinLeft( array("t1" => $myTable), "main_table.entity_id = t1.entity_id", array("admin_field_id" => "t1.id") ) ->where("t1.id is null") 但这会更改它,因此这是一个查询,我希望返回销售/订单集合。 我觉得我缺少一些简单的东西... 编辑 …

1
Magento 2中的收藏历史吗?
我知道目前Magento 2(2.1.2)中的许多代码或多或少是从Magento 1移植的,并且将来很多代码将被等效代码替代。在这方面,我想知道Magento 2系列的未来。 让我解释: Magento 1: 在Magento 1中,我们习惯于获得这样的集合: $products = Mage::getModel('catalog/product')->getCollection(); 然后,我们可以对集合应用过滤器和其他操作: $products->addAttributeToFilter('price', ['gteq' => 10]); $products->addFieldToFilter('created_at', ['lt' => '2016-10-10']); $products->setPageSize(10); // ... etc ... 最后但并非最不重要的一点是,我们的集合将返回模型: foreach ($products as $product) { echo get_class($product); // Mage_Catalog_Model_Product } Magento 2: Magento添加了许多新的抽象层,实现了一种更可靠的工作方式。这意味着当我们想要实体列表时,我们从存储库中请求它: $productResults = $this->productRepository->getList($searchCriteria); 如果我们要应用过滤器,我们使用的一个组合SearchCriteriaBuilder,在FilterGroupBuilder中,FilterBuilder和SortOrderBuilder: $this->searchCriteriaBuilder->addSortOrder( $this->sortOrderBuilder ->setField('created_at') ->setAscendingDirection() ->create() ); …


2
是否可以在本地使用分页对Magento集合进行迭代?
我的意思是-有没有办法做: $collection = $model->getCollection(); foreach ($collection as $item) { $item->doStuff(); } 这样,即使集合有10万行,它一次也只能从MySQL加载一行页面,并在后台为您神奇地分页。 从看来,Varien_Data_Collection_Db::load()这似乎是不可能的,而只是想检查一下。这似乎应该是一个普遍需要。

5
在Magento集合中使用“具有”问题
我正在尝试在Magento管理模块中为网格构建自定义集合。我创建了一个名为“ addAttributeHaving”的新收集方法,该方法仅执行以下操作: public function addAttributeHaving($value) { $this->getSelect()->having($value); return $this; } 请参阅收集代码: $collection->addFieldToSelect( array( 'entity_id', 'created_at', 'increment_id', 'customer_email', 'customer_firstname', 'customer_lastname', 'grand_total', 'status' ) ); $collection->getSelect()->joinLeft(array('sfop' => 'sales_flat_order_payment'), 'main_table.entity_id = sfop.parent_id', 'sfop.amount_authorized'); $collection->getSelect()->columns('sum(sfop.amount_authorized) AS AUTHD'); $collection->getSelect()->columns('grand_total - sum(sfop.amount_authorized) AS DIF_AU'); $collection->addFieldToFilter('main_table.state', array('in' => array('new','payment_review'))); $collection->addFieldToFilter('main_table.sd_order_type', array('neq' => 7)); $collection->addFieldToFilter('sfop.method', array('neq' => 'giftcard')); …

2
addFilter vs addFieldToFilter
Magento集合有两种过滤方法: 1. Varien_Data_Collection_Db::addFieldToFilter 2. Varien_Data_Collection::addFilter 似乎这两种方法都将条件添加到Zend_Db_Select。addFilter带来什么优势?什么时候应该代替它addFieldToFilter?

2
如何获得具有“属性值”(option_id)的属性“选项标签/属性文本”?
假设我有一个属性,它是选项的集合(下拉列表/多重选择)。 我可以检索给定产品的属性值: $store_id = [something]; $productId = [something]; // this is a select/multiselect $attribute_code = [something]; $option_id = Mage::getResourceModel('catalog/product')->getAttributeRawValue($productId, $attribute_code, $store_id ); $option_label = ??? 现在,我得到了属性option_id,它是一个数值... ...加载我的属性值的前端属性标签的最佳方法是什么?(不加载完整产品) 解决方案感谢Marius: // Not loading the product - just creating a simple instance $product = Mage::getModel('catalog/product') ->setStoreId($store_id) ->setData($attribute_code,$option_id); $option_label = $product->getAttributeText($attribute_code);

7
从类别ID获取产品集合
我正在尝试从类别ID获取产品集合。我尝试过的几件事在块中: $category = Mage::getModel('catalog/category')->load(123) ->getProductCollection(); 和 $category = Mage::getModel('catalog/category')->load(123); $products = $category->getProductCollection()->addCategoryFilter($category) ->addAttributeToFilter('type_id', 'simple') ->addAttributeToSelect('*'); 也尝试只是从phtml做到这一点 $oCatId = Mage::getModel('catalog/category')->load(769); $products->addCategoryFilter($oCatId); 这些都不起作用,但是我也没有看到任何错误。我看到了另一个似乎是相同问题的帖子:Magento-从特定类别获取产品,但是该方法对我也不起作用。谢谢你的帮助!


3
使用LIKE过滤结果
考虑以下三个“干草堆”字符串: 一种) foo bar b) welcome to foo bar industries C) foo barer 现在我的“针”: foo bar (呵呵) 我希望我的过滤器使我的针头与干草堆字符串a和b匹配,但不与c匹配。我试过了: $collection->addAttributeToFilter('name', array('like' => '%'.$needle.'%')); 但以上与c匹配。 我也尝试过: $collection->addAttributeToFilter('name', array('like' => '% '.$needle.' %')); // Note the spaces 以上仅与b匹配。 任何帮助深表感谢。

4
将列添加到网格(观察者)-where子句中的列“ store_id”含糊不清
我正在使用观察者方法在订单网格中添加一列: 在活动上-> sales_order_grid_collection_load_before我正在向集合中添加一个联接 在事件上-> core_block_abstract_prepare_layout_before我正在向网格添加一列 编辑更多信息: 活动(1): public function salesOrderGridCollectionLoadBefore($observer) { $collection = $observer->getOrderGridCollection(); $collection->addFilterToMap('store_id', 'main_table.store_id'); $select = $collection->getSelect(); $select->joinLeft(array('oe' => $collection->getTable('sales/order')), 'oe.entity_id=main_table.entity_id', array('oe.customer_group_id')); } 活动(2): public function appendCustomColumn(Varien_Event_Observer $observer) { $block = $observer->getBlock(); if (!isset($block)) { return $this; } if ($block->getType() == 'adminhtml/sales_order_grid') { /* @var $block Mage_Adminhtml_Block_Customer_Grid */ …

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.