Я делаю следующее, чтобы вывести некоторые заказы из системы на экспорт:
$orders = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('status', $statusToExport)
->addFieldToFilter('store_id', $this->processingStoreId)
->addFieldToFilter('updated_at', array('gteq' => date('Y-m-d H:i:s', $lastSyncTime)));
Мне нужно что-то добавить туда, где он не экспортируется, если порядок entity_id
в пользовательской таблице у меня есть. Если бы я использовал SQL, я бы сделал:
left join myTable as mt on main_table.entity_id = mt.entity_id
where mt.entity_id is null
Но я не уверен, как изменить запрос коллекции, чтобы сделать аналогичную вещь.
Примечание: я попробовал
$orders = $orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null")
но это меняет его так, что это запрос, и я хочу вернуть коллекцию продаж / заказов.
Я чувствую, что упускаю что-то простое ...
РЕДАКТИРОВАТЬ
Хорошо, я попробовал это:
$orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null");
Когда я повторяю, (string)$orders->getSelect()
он возвращает запрос, который я ожидал, и не возвращает результатов, когда я его запускаю $orders
Тем не менее, по-прежнему содержит предметы. Я думал, что это объединение должно было изменить коллекцию на этом этапе?
источник
$orders->getSelect() ->joinLeft(array("t1" => $myTable), "main_table.entity_id = t1.entity_id", array("admin_field_id" => "t1.id")) ->where("t1.id is null")
исключить элементы из моего текущего списка?Я нашел причину для этого.
Я хотел подсчет значений, прежде чем применить левое соединение, поэтому я добавил
это, однако, вызвало загрузку коллекции, что, в свою очередь, означало игнорирование левого соединения, которое я делал дальше. Во время отладки
_isCollectionLoaded
Фабиан посоветовал посмотреть на переменную.Сейчас я делаю это вместо того, чтобы получить счет коллекции:
Это позволяет мне считать результаты без загрузки
$orders
коллекции.Примечание: Пожалуйста, примените любые комментарии к посту Фабиана выше, так как он руководил мной в этом, но я чувствовал, что решение оправдывает его собственный ответ.
источник