colleciton的启用
Ticket\Model\Log.php Ticket\Model\Mysql4\Log.php Ticket\Model\Mysql4\Log\Collection.php
<?php class Test_Ticket_Model_Mysql4_Log_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract { public function _construct() { parent::_construct(); $this->_init('ticket/log'); } public function getOrderTotalByState($state) { $this->getSelect() ->reset('columns') ->where('customer_id=?', Mage::getSingleton('customer/session')->getCustomer()->getId()) ->where('state=?', $state) ->columns(new Zend_Db_Expr('count(*) as total')); // echo $this->getSelect(); return $this->fetchItem()->getData('total'); } }
使用colleciton->getSelectSql()输出运行的SQL语句
<?php $collection = Mage::getModel('catalog/category')->getCollection(); echo $collection->getSelectSql(true); $collection->getSelectSql()->__toString(); ?>
magento获取SQL语句的另外一种方法是设置打印SQL为true,collection全路径写法
$collection=Mage::getResourceModel('reports/product_collection'); $collection->printlogquery(true);
对模型对应的表集合进行排序
$collection = Mage::getModel('module/model_name')->getCollection(); $collection->getSelect()->order('last_name ASC');
对多个字段进行排序
$collection = Mage::getModel('module/model_name')->getCollection(); $collection->getSelect()->order( array('order ASC','last_name ASC', 'first_name ASC') );
3. 使用IF/THEN
$collection = Mage::getModel('module/model_name')->getCollection(); $collection->getSelect()->order( array('IF(`order`>0, `order`, 9999) ASC','last_name ASC', 'first_name ASC') );
在上面的例子中,如果order大于0并且小于等于9999按照升序排列,然后按last_name, first_name升序排列。
得到所有的记录明细非分页
$collection->toArray();
config.xml中的global标签 获取数据库配置信息
$dbname = (String) Mage::getConfig()->getNode('global/resources/default_setup/connection/dbname'); $host = (String) Mage::getConfig()->getNode('global/resources/default_setup/connection/host'); $user = (String) Mage::getConfig()->getNode('global/resources/default_setup/connection/username'); $pwd = (String) Mage::getConfig()->getNode('global/resources/default_setup/connection/password');
根据xml文件中的节点往下找就可以找到对应的字段
同理
<global> <test> <virtualcard> <separator>-</separator> <charset> <alphanum>ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789</alphanum> <alpha>ABCDEFGHIJKLMNOPQRSTUVWXYZ</alpha> <num>0123456789</num> </charset> </virtualcard> </test> </global>
调用方法
const XML_CHARSET_SEPARATOR = 'global/test/virtualcard/separator'; public function getCodeSeparator() { return (string) Mage::app()->getConfig()->getNode(self::XML_CHARSET_SEPARATOR); }
Join联表查询
$collection = Mage::getModel('ticket/ticket')->getCollection(); $collection->join('log','(main_table.id=log.ticketid and log.status>0)',array(''));//non select if($status){ $collection->addFieldToFilter('log.status', $status); } $collection->addFieldToFilter('main_table.status', array("gt"=>0)); /*$collection->getSelect()->joinLeft →joinInner() →joinLeft() →joinRight() →joinFull() →joinCross() →joinNatural()*/ $collection->getSelect()->joinLeft(array('o'=>'sales_flat_order'),'main_table.order_id = o.entity_id','grand_total');
分组
$collection->getSelect()->group('entity_id'); #$collection->groupByAttribute('entity_id');
分页
Mage::getModel('catalog/product')->getCollection()->addAttributeToSort('stdate','desc') ->setPageSize(10)->setCurPage(2); $collection->getSelect()->limitPage(2,10);
只选某一个字段,点击Grid header可以排序
Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('price')->setOrder('id','desc');
在这里我将Magento addFieldToFilter 所有的条件判断符号列出来供大家参考。
array("eq"=>'n2610') WHERE (e.sku = 'n2610') //$collection->getSelect()->where('order_id =5'); array("neq"=>'n2610') WHERE (e.sku != 'n2610') array("like"=>'n2610') WHERE (e.sku like 'n2610') array("nlike"=>'n2610') WHERE (e.sku not like 'n2610') array("is"=>'n2610') WHERE (e.sku is 'n2610') array("in"=>array('n2610','ABC123') WHERE (e.sku in ('n2610','ABC123')) array("nin"=>array('n2610')) WHERE (e.sku not in ('n2610')) array("notnull"=>'n2610') WHERE (e.sku is NOT NULL) array("null"=>'n2610') //关键字NULL是最特殊的sql句,它将忽略你传入的值。 WHERE (e.sku is NULL) array("gt"=>'n2610') WHERE (e.sku > 'n2610') array("lt"=>'n2610') WHERE (e.sku < 'n2610') array("gteq"=>'n2610') WHERE (e.sku >= 'n2610') array("moreq"=>'n2610') WHERE (e.sku >= 'n2610') array("lteq"=>'n2610') WHERE (e.sku <= 'n2610') array("finset"=>array('n2610')) WHERE (find_in_set('n2610',e.sku)) array('from'=>'10','to'=>'20') WHERE e.sku >= '10' and e.sku <= '20'
addFieldToFilter 一个字段只能加一次,后面会替换前面的
if($parms['dt_start']&&empty($parms['dt_end'])){ $pointParams['created_at'] = array('gteq'=>trim($parms['dt_start'])); } if($parms['dt_end']&&empty($parms['dt_start'])){ $pointParams['created_at'] = array('lteq'=>trim($parms['dt_end'])); } if($parms['dt_end']&&$parms['dt_start']){ $pointParams['created_at'] = array('from'=>trim($parms['dt_start']),'to'=>trim($parms['dt_end'])); }
magento当使用group语句进行分页出现bug ,需修改文件 lib/Varien/Data/Collection/Db.php
public function getSelectCountSql() { $this->_renderFilters(); $countSelect = clone $this->getSelect(); $countSelect->reset(Zend_Db_Select::ORDER); $countSelect->reset(Zend_Db_Select::LIMIT_COUNT); $countSelect->reset(Zend_Db_Select::LIMIT_OFFSET); $countSelect->reset(Zend_Db_Select::COLUMNS); // Count doesn't work with group by columns keep the group by if(count($this->getSelect()->getPart(Zend_Db_Select::GROUP)) > 0) { $countSelect->reset(Zend_Db_Select::GROUP); $countSelect->distinct(true); $group = $this->getSelect()->getPart(Zend_Db_Select::GROUP); $countSelect->columns("COUNT(DISTINCT ".implode(", ", $group).")"); } else { $countSelect->columns('COUNT(*)'); } return $countSelect; }
推荐在子类Collection中设置
$this->_totalRecords
dfghdfgd
相关推荐
`Varien_Data_Collection`是Magento中最常用的数据集合类,它为开发者提供了一种高效的方式来管理多个对象。其主要特点包括: - **数据存储**:集合中的数据通常是以对象的形式存储的,这些对象可以是任何继承自`...
1. **MVC架构**:Magento基于Model-View-Controller(MVC)设计模式,这有助于将业务逻辑、数据处理和用户界面分离开来,提高代码的可维护性和可扩展性。`mvc流程.png`可能详细解释了模型、视图和控制器在Magento中...
Controller 使用 Object Models,这一步骤中,Magento 的 Model 开始配置(加载 config.xml, system.xml, layout 下的*.xml 等所有配置文件)。Object Model 是 Magento 的核心组件之一,负责处理数据和业务逻辑。 ...
在Magento中,插件主要分为两种类型:模型(Model)、资源模型(Resource Model)、集合(Collection)、助手(Helper)、控制器(Controller)、块(Block)和视图(View)。这些组件协同工作,以实现特定功能。在...
在电商领域,经常会有需求将一个已经建立并运行良好的Magento站点快速复制到另一个服务器,用于测试、备份或者创建一个新的独立站点。这个过程涉及到数据库的备份与还原、文件系统的复制以及配置的调整等多个步骤。 ...
这个模型会使用Magento的内置资源模型(`Mage_Cms_Model_Resource_Page_Collection`)来获取所有的CMS页面,然后可以通过过滤、排序等操作来定制数据。 3. **视图(navigation.phtml)**: 视图文件`navigation....
标题:“Magento数据结构分析” 描述:“Magento数据字典”提供了对Magento系统中各种数据库表的深入理解,这对于理解和优化Magento的性能至关重要。 一、Magento数据结构解析 Magento是一款功能强大的电子商务...
再者,Magento的模板引擎(Mage_Core_Model_Layout)允许开发者轻松地控制页面布局和内容展示。理解如何编写布局更新XML,以及如何在模板(.phtml)文件中调用模型、块和助手类的方法,是创建美观且功能丰富的前端...
配置系统掌管着几乎所有“module/model/class /template/etc”。它把整个 Magento 系统抽象出来,用一个配置文件来描述。这里的“配置文件”并不是一 个物理上存在的文件,而是 Magento 根据当前的系统状态动态生成...
1. **技术栈**:Magento基于PHP编程语言,使用MySQL数据库存储数据,采用Zend Framework作为基础架构,遵循MVC(Model-View-Controller)设计模式。 2. **性能优化**:Magento支持缓存管理,如页面缓存、块缓存等,...
- Magento采用了MVC(Model-View-Controller)架构模式,这种模式有助于提高代码的可读性和可维护性。 - 使用ZEND Framework作为底层框架,提供了强大的功能支持。 2. **模块化设计** - Magento的设计理念之一...
在Magento中,模型类通常继承自Mage_Core_Model_Abstract,它们与数据库交互,执行CRUD(创建、读取、更新、删除)操作。模型对象封装了数据库表的实体,例如产品、订单、客户等,提供了一套API供其他层调用。 **...
Magento是开源的电子商务平台,广泛用于在线商店的建设。SMTP(Simple Mail Transfer Protocol)是用于发送电子邮件的标准协议。在Magento中,SMTP插件扮演着关键角色,它允许商家通过更安全、可靠的SMTP服务器发送...
Magento是一款强大的开源电子商务平台,以其高度可定制性和灵活性著称。作为一款基于PHP开发的系统,它为商家提供了丰富的功能,包括商品管理、订单处理、客户管理、营销工具等。以下将详细介绍`magento入门学习资料...
其核心理念是让开发者的工作变得更简单,通过MVC(Model-View-Controller)架构模式和依赖注入,Laravel提供了良好的代码组织和可维护性。 Magento则是一个功能强大的开源电子商务平台,以其高度可定制性和丰富的...
这个“magento-java-master.zip_magento”压缩包可能是为了提供一个Java连接Magento源码的示例或者库,帮助开发者实现Java与Magento系统的交互。 在Java中与Magento进行交互通常涉及到以下几个关键知识点: 1. **...
1. **框架结构**:Magento基于MVC(Model-View-Controller)架构,这使得代码组织有序,易于理解和维护。模型层处理数据操作,视图层负责展示,控制器层协调两者,确保系统高效运行。 2. **数据库设计**:Magento的...
Magento采用的是MVC(Model-View-Controller)架构,这种设计模式在Web开发中广泛使用,它将业务逻辑、数据处理和用户界面分离,提高了代码的可维护性和复用性。此外,Magento还基于Zend Framework构建,利用其强大...
Magento是一款开源的电子商务平台,专为在线商家设计,提供强大的购物车系统和丰富的功能。"Magik Shoes Magento 模板"是专为Magento 1.7版本设计的商店主题,旨在提升在线鞋类销售商店的用户体验和视觉吸引力。在这...