Magento의 AddfieldTofilter를 사용하여 기존 열별로 필터링합니다
-
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 개념은 다음과 같습니다.
SELECT * FROM Orders o WHERE o.total_paid = o.grand_total
객체 메소드 호출을 순전히 수행 할 수 있습니까? 아니면로드 후 필터링을 수행해야합니까?
다른 방법 ORM
시스템이 이것을 처리합니까?
해결책
나는 이것에 대한 명확한 대답을 기다리고 있었지만 아무것도 일어나지 않을 때 나는 내가 찾은 것을 공유 할 수도 있습니다. 나는 AddfieldTofilter를 추적했고 분명히 당신이 사용하는 모든 값은 인용되므로 열의 이름을 사용하여 이것을 "해킹"할 수는 없습니다. 사실 나는 적어도이 수업 내에서는이 작업을 수행 할 수있는 방법을 보지 못합니다.
현실적으로 적어도 지금은로드 후 필터링과 함께 가야한다고 생각합니다. 물론 이것은 비효율적 인 코드의 정의이지만, 다시 계산 효율성이 우선 순위라면 처음에는 Magento를 사용하지 않을 것입니다 ...
다른 팁
내 프로젝트 중 하나 에서이 문제를 해결해야했고 더 나은 해결책을 찾는 동안이 질문을 발견했습니다. 내 해킹은 다음과 같습니다.
$orders = Mage::getModel('sales/order')->getCollection();
$orders->getSelect()
->where('total_paid=grand_total');
데이터베이스의 기본 기능이 Magento의 ORM에 의해 간과된다는 것이 짜증납니다.