質問

仮想的な状況。 grand_totalがsales/orderに等しいすべての順序でtotal_paidコレクションを生成/ロードします。 addFieldToFilterを使用して特定の値でフィルタリングできることはわかっていますが、このメソッドを使用して他のデータベース値でフィルタリングすることは可能です。そうでない場合、Magentoシステムにこれを許可するデータアクセスオブジェクトがあります。

$orders = Mage::getModel('sales/order');
$orders = $orders->getCollection();
$orders->addFieldToFilter('total_paid',Array('eq'=>30));  //would find all the orders that were 30 
//syntax to find all the orders whose total_paid value is equal to it's grand_total attribute
//????????

non-eav SQLの概念I <!>#8217; mの目的は次のとおりです:

SELECT * FROM Orders o WHERE o.total_paid = o.grand_total

これは、純粋にオブジェクトメソッド呼び出しで実行できますか、またはロード後のフィルタリングを実行する必要がありますか?

他のORMシステムはこれをどのように処理しますか?

役に立ちましたか?

解決

これに対する明確な答えを待っていましたが、何も出てこないので、見つけたことを共有することもできます。 私はaddFieldToFilterをトレースしましたが、使用するすべての値は引用符で囲まれているため、実際には<!> quot; hack <!> quot;これには、列の名前を使用します。 実際、少なくともこのクラス内では、これを行う方法はありません。

現実的には、少なくとも現時点では、ロード後のフィルタリングを行う必要があると思います。もちろん、これは非効率なコードの定義そのものですが、計算効率が優先される場合は、最初にMagentoを使用することはありません...

他のヒント

私のプロジェクトの1つでこれに対処しなければならなかったので、より良い解像度を探しているときにこの質問に出くわしました。私のハックは次のようになります:

$orders = Mage::getModel('sales/order')->getCollection();
$orders->getSelect()
       ->where('total_paid=grand_total');

MagentoのORMがこのようなデータベースの基本的な機能を見過ごしているのは気に障ります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top