Estou fazendo o seguinte para obter alguns pedidos do sistema para exportação:
$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)));
Preciso adicionar algo em que não exporte se o pedido entity_id
estiver em uma tabela personalizada que possuo. Se eu estivesse usando SQL, faria:
left join myTable as mt on main_table.entity_id = mt.entity_id
where mt.entity_id is null
Mas não tenho certeza de como modificar a consulta de coleção para fazer uma coisa semelhante.
Nota: eu tentei
$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")
mas isso muda, então é uma consulta e eu quero a coleção de pedidos / vendas devolvida.
Sinto que estou perdendo algo simples ...
EDITAR
Ok, eu tentei isso:
$orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null");
Quando eu ecoo, (string)$orders->getSelect()
ele retorna a consulta que eu esperaria e não retorna resultados ao executá-lo. $orders
no entanto, ainda contém itens. Eu pensei que essa junção era para modificar a coleção neste momento?
fonte
$orders->getSelect() ->joinLeft(array("t1" => $myTable), "main_table.entity_id = t1.entity_id", array("admin_field_id" => "t1.id")) ->where("t1.id is null")
excluir os itens da minha lista atual?Eu encontrei o motivo disso.
Eu queria uma contagem de valores antes de aplicar a junção esquerda, então adicionei
no entanto, isso causou o carregamento da coleção, o que, por sua vez, significou que ignorava a junção esquerda que eu estava fazendo mais adiante. Durante a depuração, olhar para o var
_isCollectionLoaded
foi uma boa dica de Fabian.Agora, estou fazendo isso para obter a contagem da coleção:
Isso permite que eu conte os resultados sem carregar a
$orders
coleção.Nota: Por favor, aplique quaisquer upvotes aos Fabians postados acima, pois ele me guiou nisso, mas eu senti que a solução justificava sua própria resposta.
fonte