Magento SELECT 通过 ORM
Magento SELECT via ORM
我想知道如何从 Magento 核心 table 做一个 SELECT 但不使用纯 SQL 而是使用集合。
目前,在扩展 Mage_Core_Model_Abstract 的 class 中,在给定函数上我有以下代码:
$resource = Mage::getSingleton("core/resource");
$tableName_SalesQuoteItem = $resource->getTableName("sales/quote_item");
$readConnection = $resource->getConnection("core_read");
$sqlInstruction = "SELECT item_id FROM {$tableName_SalesQuoteItem} WHERE sku = :sku AND quote_id = :quote_id;";
$binds = array("sku" => $itemSku, "quote_id" => $quoteID);
$result = $readConnection->query($sqlInstruction, $binds);
if($row = $result->fetch()) {
$currentItemID = $row["item_id"];
}
有什么想法吗?
谢谢!
从你的问题来看,你似乎正在寻找一种 ORM 方法来实现你正在做的与你的查询相同的事情。
给你:
$collection = Mage::getModel('sales/quote')->getCollection();
$collection->addAttributeToFilter('sku',$itemSku);
$collection->addAttributeToFilter('quote_id',$quoteID);
if($collection->count())
{
//Add your code here
$firstItem = $collection->getFirstItem();
print_r($firstItem);
}
阅读有关 Magento ORM 基础知识的更多信息here
如果 addAttributeToFilter 不起作用,您也可以尝试 addFieldToFilter。
问题似乎是当项目存储在子 table sales/quote_item
这是一个功能原型:
<?php
require_once( 'app/Mage.php' );
umask(0);
Mage::app('default');
$sCustomerId = 1;
$oQuotes = Mage::getModel( 'sales/quote' )->getCollection();
$oQuotes->addFieldToFilter( 'customer_id', $sCustomerId );
foreach( $oQuotes as $oQuote )
{
var_dump( $oQuote->getId() );
var_dump( $oQuote->getData( 'customer_email' ) );
var_dump( $oQuote->getData( 'customer_id' ) );
$oItems = Mage::getModel( 'sales/quote_item' )
->getCollection()
->setQuote( $oQuote );
foreach( $oItems as $oItem )
{
var_dump( $oItem->getData( 'sku' ) );
var_dump( $oItem->getData( 'name' ) );
var_dump( $oItem->getData( 'description' ) );
var_dump( $oItem->getData( 'price' ) );
}
}
$iCountQuotes = $oQuotes->count();
var_dump( $iCountQuotes );
?>
我想知道如何从 Magento 核心 table 做一个 SELECT 但不使用纯 SQL 而是使用集合。
目前,在扩展 Mage_Core_Model_Abstract 的 class 中,在给定函数上我有以下代码:
$resource = Mage::getSingleton("core/resource");
$tableName_SalesQuoteItem = $resource->getTableName("sales/quote_item");
$readConnection = $resource->getConnection("core_read");
$sqlInstruction = "SELECT item_id FROM {$tableName_SalesQuoteItem} WHERE sku = :sku AND quote_id = :quote_id;";
$binds = array("sku" => $itemSku, "quote_id" => $quoteID);
$result = $readConnection->query($sqlInstruction, $binds);
if($row = $result->fetch()) {
$currentItemID = $row["item_id"];
}
有什么想法吗?
谢谢!
从你的问题来看,你似乎正在寻找一种 ORM 方法来实现你正在做的与你的查询相同的事情。
给你:
$collection = Mage::getModel('sales/quote')->getCollection();
$collection->addAttributeToFilter('sku',$itemSku);
$collection->addAttributeToFilter('quote_id',$quoteID);
if($collection->count())
{
//Add your code here
$firstItem = $collection->getFirstItem();
print_r($firstItem);
}
阅读有关 Magento ORM 基础知识的更多信息here
如果 addAttributeToFilter 不起作用,您也可以尝试 addFieldToFilter。
问题似乎是当项目存储在子 table sales/quote_item
这是一个功能原型:
<?php
require_once( 'app/Mage.php' );
umask(0);
Mage::app('default');
$sCustomerId = 1;
$oQuotes = Mage::getModel( 'sales/quote' )->getCollection();
$oQuotes->addFieldToFilter( 'customer_id', $sCustomerId );
foreach( $oQuotes as $oQuote )
{
var_dump( $oQuote->getId() );
var_dump( $oQuote->getData( 'customer_email' ) );
var_dump( $oQuote->getData( 'customer_id' ) );
$oItems = Mage::getModel( 'sales/quote_item' )
->getCollection()
->setQuote( $oQuote );
foreach( $oItems as $oItem )
{
var_dump( $oItem->getData( 'sku' ) );
var_dump( $oItem->getData( 'name' ) );
var_dump( $oItem->getData( 'description' ) );
var_dump( $oItem->getData( 'price' ) );
}
}
$iCountQuotes = $oQuotes->count();
var_dump( $iCountQuotes );
?>