Использование addFieldToFilter в Magento для фильтрации по существующим столбцам

StackOverflow https://stackoverflow.com/questions/652435

Вопрос

Гипотетическая ситуация. Я хочу заполнить / загрузить коллекцию 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, которую я & # 8217; я понимаю:

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top