Estoy haciendo lo siguiente para obtener algunos pedidos del sistema para la exportación:
$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)));
Necesito agregar algo en donde no se exporta si el pedido entity_id
está en una tabla personalizada que tengo. Si estuviera usando SQL, haría:
left join myTable as mt on main_table.entity_id = mt.entity_id
where mt.entity_id is null
Pero no estoy seguro de cómo modificar la consulta de recopilación para hacer algo similar.
Nota: lo intenté
$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")
pero esto lo cambia, por lo que es una consulta y quiero que se devuelva la colección de ventas / pedidos.
Siento que me falta algo simple ...
EDITAR
Ok, he intentado esto:
$orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null");
Cuando hago eco (string)$orders->getSelect()
, devuelve la consulta que esperaría y no devuelve ningún resultado cuando la ejecuto. $orders
Sin embargo, todavía contiene elementos. ¿Pensé que esta unión estaba destinada a modificar la colección en este momento?
fuente
$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 los elementos de mi lista actual?Encontré la razón de esto.
Quería un recuento de valores antes de aplicar la combinación izquierda, así que agregué
Sin embargo, esto hizo que la colección se cargara, lo que a su vez significaba que ignoraba la unión izquierda que estaba haciendo más adelante. Mientras se depuraba, mirar a la var
_isCollectionLoaded
fue un buen consejo de Fabian.Ahora estoy haciendo esto para obtener el recuento de la colección:
Esto me permite contar los resultados sin cargar la
$orders
colección.Nota: Aplique cualquier voto a favor a las publicaciones de Fabians arriba, ya que él me guió en esto, pero sentí que la solución justificaba su propia respuesta.
fuente