`
hudeyong926
  • 浏览: 2034840 次
  • 来自: 武汉
社区版块
存档分类
最新评论

magento model collection

 
阅读更多

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

 

分享到:
评论

相关推荐

    magento官方文档翻译超好

    `Varien_Data_Collection`是Magento中最常用的数据集合类,它为开发者提供了一种高效的方式来管理多个对象。其主要特点包括: - **数据存储**:集合中的数据通常是以对象的形式存储的,这些对象可以是任何继承自`...

    magento二次开发大全

    1. **MVC架构**:Magento基于Model-View-Controller(MVC)设计模式,这有助于将业务逻辑、数据处理和用户界面分离开来,提高代码的可维护性和可扩展性。`mvc流程.png`可能详细解释了模型、视图和控制器在Magento中...

    Magento深入理解Magento

    app/code/local/App/Configviewer/Model app/code/local/App/Configviewer/sql ``` 2. **创建配置文件** 接下来,需要创建两个重要的配置文件: - `app/code/local/App/Configviewer/etc/config.xml`:该文件...

    Magento系统请求响应流程图

    Controller 使用 Object Models,这一步骤中,Magento 的 Model 开始配置(加载 config.xml, system.xml, layout 下的*.xml 等所有配置文件)。Object Model 是 Magento 的核心组件之一,负责处理数据和业务逻辑。 ...

    Magento 后台管理插件示例

    在Magento中,插件主要分为两种类型:模型(Model)、资源模型(Resource Model)、集合(Collection)、助手(Helper)、控制器(Controller)、块(Block)和视图(View)。这些组件协同工作,以实现特定功能。在...

    magento快速复制网站_magento_magento快速复制站_

    在电商领域,经常会有需求将一个已经建立并运行良好的Magento站点快速复制到另一个服务器,用于测试、备份或者创建一个新的独立站点。这个过程涉及到数据库的备份与还原、文件系统的复制以及配置的调整等多个步骤。 ...

    magento创建动态菜单 Create Dynamic CMS Navigation For Magento Frontend

    这个模型会使用Magento的内置资源模型(`Mage_Cms_Model_Resource_Page_Collection`)来获取所有的CMS页面,然后可以通过过滤、排序等操作来定制数据。 3. **视图(navigation.phtml)**: 视图文件`navigation....

    magento数据结构分析

    标题:“Magento数据结构分析” 描述:“Magento数据字典”提供了对Magento系统中各种数据库表的深入理解,这对于理解和优化Magento的性能至关重要。 一、Magento数据结构解析 Magento是一款功能强大的电子商务...

    Magento 常用方法和插件

    再者,Magento的模板引擎(Mage_Core_Model_Layout)允许开发者轻松地控制页面布局和内容展示。理解如何编写布局更新XML,以及如何在模板(.phtml)文件中调用模型、块和助手类的方法,是创建美观且功能丰富的前端...

    Magento模块开发教程.pdf

    配置系统掌管着几乎所有“module/model/class /template/etc”。它把整个 Magento 系统抽象出来,用一个配置文件来描述。这里的“配置文件”并不是一 个物理上存在的文件,而是 Magento 根据当前的系统状态动态生成...

    开源网店系统 Magento

    1. **技术栈**:Magento基于PHP编程语言,使用MySQL数据库存储数据,采用Zend Framework作为基础架构,遵循MVC(Model-View-Controller)设计模式。 2. **性能优化**:Magento支持缓存管理,如页面缓存、块缓存等,...

    The Definitive Guide to Magento (Apress出品 Magento权威指南)

    - Magento采用了MVC(Model-View-Controller)架构模式,这种模式有助于提高代码的可读性和可维护性。 - 使用ZEND Framework作为底层框架,提供了强大的功能支持。 2. **模块化设计** - Magento的设计理念之一...

    深入学习Magento必读

    在Magento中,模型类通常继承自Mage_Core_Model_Abstract,它们与数据库交互,执行CRUD(创建、读取、更新、删除)操作。模型对象封装了数据库表的实体,例如产品、订单、客户等,提供了一套API供其他层调用。 **...

    Magento-SMTP-Email

    Magento是开源的电子商务平台,广泛用于在线商店的建设。SMTP(Simple Mail Transfer Protocol)是用于发送电子邮件的标准协议。在Magento中,SMTP插件扮演着关键角色,它允许商家通过更安全、可靠的SMTP服务器发送...

    magento入门学习资料

    Magento是一款强大的开源电子商务平台,以其高度可定制性和灵活性著称。作为一款基于PHP开发的系统,它为商家提供了丰富的功能,包括商品管理、订单处理、客户管理、营销工具等。以下将详细介绍`magento入门学习资料...

    Laravel开发-magento

    其核心理念是让开发者的工作变得更简单,通过MVC(Model-View-Controller)架构模式和依赖注入,Laravel提供了良好的代码组织和可维护性。 Magento则是一个功能强大的开源电子商务平台,以其高度可定制性和丰富的...

    magento-java-master.zip_magento

    这个“magento-java-master.zip_magento”压缩包可能是为了提供一个Java连接Magento源码的示例或者库,帮助开发者实现Java与Magento系统的交互。 在Java中与Magento进行交互通常涉及到以下几个关键知识点: 1. **...

    magento电子商城源码

    1. **框架结构**:Magento基于MVC(Model-View-Controller)架构,这使得代码组织有序,易于理解和维护。模型层处理数据操作,视图层负责展示,控制器层协调两者,确保系统高效运行。 2. **数据库设计**:Magento的...

    magento模块组件或插件开发教程

    Magento采用的是MVC(Model-View-Controller)架构,这种设计模式在Web开发中广泛使用,它将业务逻辑、数据处理和用户界面分离,提高了代码的可维护性和复用性。此外,Magento还基于Zend Framework构建,利用其强大...

    magik shoes magento 模板, magento 1.7 模板

    Magento是一款开源的电子商务平台,专为在线商家设计,提供强大的购物车系统和丰富的功能。"Magik Shoes Magento 模板"是专为Magento 1.7版本设计的商店主题,旨在提升在线鞋类销售商店的用户体验和视觉吸引力。在这...

Global site tag (gtag.js) - Google Analytics