Mevcut sütunlara göre filtrelemek için Magento'nın addFieldToFilter kullanma

2 Cevap php

Varsayımsal bir durum. Ben grand_total total_paid eşit olan her sipariş ile satış / sipariş toplama yük / doldurmak istiyor. Ben belirli bir değere göre filtre için addFieldToFilter kullanabilirsiniz biliyorum, ama diğer veritabanı değerlere göre filtre uygulamak için bu yöntemi kullanmak mümkündür. Eğer değilse, bu olanak Magento sisteminde herhangi bir veri erişim nesnesi vardır.

$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
//????????

Ben açgözlü değilim olmayan eav SQL kavramdır

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

Bu nesne, yöntem çağrıları ile sadece yapmak, ya da post-yük filtreleme yapmalıyım mümkün mü?

Nasıl diğer ORM sistemleri bu ele?

2 Cevap

I was waiting for a definite answer to this, but seeing as nothing's come up I might as well share what I've found out. I traced addFieldToFilter and apparently every value you use ends up quoted so you can't really "hack" this by using the name of a column. In fact I don't see any way to do this, at least not within this class.

Gerçekçi Ben en azından şu an için, post-yük filtreleme ile gitmek gerekir düşünüyorum. Bu elbette verimsiz kod çok tanımı, ancak hesaplama verimliliği öncelikli olsaydı o zaman tekrar, sen ilk etapta Magento kullanarak olmaz ...

Sadece benim projelerinden biri olarak bu sorunu çözmek için vardı ve daha iyi çözünürlük ararken bu soru geldi. Benim hack bu gibi görünüyor:

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

Bu veritabanları gibi temel işlevleri Magento'nın ORM tarafından gözardı edilir ki beni rahatsız ediyor.