有些人可以在课程loadByCustomerId()
中解释Mage_Sales_Model_Mysql4_Quote
中找到的magento代码片段。
$read = $this->_getReadAdapter();
$select = $this->_getLoadSelect('customer_id', $customerId, $quote)
->where('is_active=1')
->order('updated_at desc')
->limit(1);
$data = $read->fetchRow($select);
当我var_dump($data)
时,我发现它是一系列客户数据。什么是与此$data
数组关联的模型?感谢。
答案 0 :(得分:5)
Magento“模型”(意味着允许您与数据库交互的实体,而不是通用服务器/域模型)有两层。第一个是“模型”层。这包含与模型进行逻辑交互的方法。 (给我一个客户的地址,下订单等)。第二层是“资源模型”层。资源模型处理与数据库(或更一般地说,数据存储或持久层等)的任何交互。
资源模型与数据库交互的方式是通过适配器对象。一个用于读取信息,另一个用于写入信息。
所以,你在班级Mage_Sales_Model_Mysql4_Quote
。这是一个资源模型。它是Mage_Sales_Model_Quote
对象的后端,用
$model = Mage::getModel('sales/quote');
使用此行
$read = $this->_getReadAdapter();
您将获得对该模型的读取适配器的引用。这将允许您对数据库进行查询。
使用此行
$select = $this->_getLoadSelect('customer_id', $customerId, $quote)
->where('is_active=1')
->order('updated_at desc')
->limit(1);
您将获得此资源模型将用于加载sales/quote
对象的SQL语句(也是一个对象)的引用。
//gets a reference
$this->_getLoadSelect('customer_id', $customerId, $quote)
然后,您正在调用该对象上的方法以使用其他逻辑
来更改它->where('is_active=1')
->order('updated_at desc')
->limit(1);
在伪sql中,查询通常看起来像这样
SELECT * FROM quote_table;
但是在调用这些方法之后,查询将类似于
SELECT * FROM quote_table
WHERE is_active = 1
ORDER BY updated_at desc
LIMIT 1;
最后,
$data = $read->fetchRow($select);
这里您使用先前提取的读取适配器来查询数据库中查询将获取的特定报价项行。
答案 1 :(得分:2)
_getReadAdapter()
获取只读数据库连接。 _getLoadSelect
在模型(Mage_Sales_Model_Mysql4_Quote)主表上创建一个选择查询。返回的数据只是来自SQL查询的原始数据,与任何特定的后端模型无关。