class Nextshopping_Shipment_Model_Mysql4_Shipment_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
{
public function loadProductForShipment(){
$coll = new Varien_Data_Collection();
$shipment = Mage::getModel('shipment/shipment')->getResourceCollection();
$order_item_id = array();
if($shipment){
foreach ($shipment as $item){
$order_item_id[] = $item->getOrderItemId();
}
}
$collection = Mage::getModel('sales/order_item')->getCollection();
if($order_item_id){
$collection = $collection ->addFieldToFilter('item_id',array('nin'=>$order_item_id));
}
$collection->addAttributeToSelect('item_id');
$collection->addAttributeToSelect('product_id');
$collection->addAttributeToSelect('name');
$collection->addAttributeToSelect('sku');
$collection->addAttributeToSelect('qty_ordered');
$collection->getSelect()
->join('sales_flat_order','main_table.order_id = sales_flat_order.entity_id AND sales_flat_order.state = "complete"',
array('state','status as order_status','increment_id as order_increment_id'))
->join('sales_flat_invoice','sales_flat_invoice.order_id = sales_flat_order.entity_id',
array('entity_id as invoice_id'))
->join('sales_flat_order_payment','sales_flat_order_payment.entity_id = sales_flat_order.entity_id AND method != "cashondelivery"',
array('method'))
->join('sales_flat_shipment','sales_flat_shipment.order_id = sales_flat_order.entity_id',
array('created_at','updated_at'));
if($collection){
foreach ($collection as $item){
$object = new Varien_Object();
$object->setData($item->getData());
$object->setData('qty_shipmented',0);
if(strtotime($item['created_at']) + 3600*24*3 < time()){
$object->setData('more_than_three',$item['qty_ordered']);
}else{
$object->setData('more_than_three',0);
}
if(strtotime($item['created_at']) +3600*24*5 < time()){
$object->setData('more_than_five',$item['qty_ordered']);
}else{
$object->setData('more_than_five',0);
}
if(strtotime($item['created_at']) +3600*24*7 < time()){
$object->setData('more_than_seven',$item['qty_ordered']);
}else{
$object->setData('more_than_seven',0);
}
$coll->addItem($object);
}
}
//$coll = Mage::getModel('sales/order_item')->getResourceCollection();
return $coll;
}
protected function _prepareCollection()
{
$collection = Mage::getModel('shipment/shipment')->getCollection()->loadProductForShipment();
$this->setCollection($collection);
return parent::_prepareCollection();
}
在此方法中,more_than_three
是不在db中的自定义字段。
此集合用于网格调用,但是当我单击“搜索”程序回声
Fatal error: Call to undefined method Varien_Data_Collection::addFieldToFilter() in E:\Program Files\xampp\htdocs\shopping.nextmedia.com\app\code\core\Mage\Adminhtml\Block\Widget\Grid.php on line 472
谁能告诉我该怎么做?
答案 0 :(得分:1)
检查错误引用类Varien_Data_Collection
的原因;因为在使用Mage::getModel('sales/order_item')->getCollection();
时,它应该返回Mage_Sales_Model_Resource_Order_Item_Collection
类型的对象!
Varien_Data_Collection
只是Magento中任何集合扩展的类。
另外,您可以尝试其他方法来创建集合 - 我不知道您的版本是否正确:
// instead of
Mage::getModel('sales/order_item')->getCollection();
// try something like:
Mage::getModel('sales/order_item')->getResourceCollection();
// or:
Mage::getResourceModel('sales/order_item')->getCollection();
// or even:
Mage::getResourceModel('sales/order_item_collection');
答案 1 :(得分:0)
如果查看官方文档,您会发现该类没有这样的方法:http://docs.magentocommerce.com/Varien/Varien_Data/Varien_Data_Collection.html
我的猜测是你正在寻找addFilter方法来实现同样的目标;)