Использование addFieldToFilter в Magento для фильтрации по существующим столбцам - PullRequest
1 голос
/ 17 марта 2009

Гипотетическая ситуация. Я хочу заполнить / загрузить коллекцию sales/order с каждым заказом, где grand_total равен 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, за которое я цепляюсь:

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

Возможно ли это делать исключительно с вызовами методов объекта или мне нужно выполнять фильтрацию после загрузки?

Как другие ORM системы справляются с этим?

Ответы [ 2 ]

4 голосов
/ 19 марта 2009

Я ждал однозначного ответа на этот вопрос, но, видя, что ничего не происходит, я мог бы также поделиться тем, что я обнаружил. Я проследил addFieldToFilter, и, по-видимому, каждое используемое вами значение заканчивалось в кавычках, поэтому вы не можете «взломать» это, используя имя столбца. На самом деле я не вижу никакого способа сделать это, по крайней мере, не в этом классе.

Реально, я думаю, вам нужно будет использовать фильтрацию после загрузки, по крайней мере, сейчас. Это, конечно, само определение неэффективного кода, но, опять же, если бы вычислительная эффективность была приоритетом, вы бы не использовали Magento в первую очередь ...

1 голос
/ 09 февраля 2011

Просто пришлось обратиться к этому в одном из моих проектов и наткнулся на этот вопрос в поисках лучшего разрешения. Мой хак выглядит так:

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

Меня раздражает, что такая базовая функциональность баз данных игнорируется ORM Magento.

...