Использование addFieldToFilter в Magento для фильтрации по существующим столбцам
-
19-08-2019 - |
Вопрос
Гипотетическая ситуация. Я хочу заполнить / загрузить коллекцию 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.