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 );
?>