Wykonuję następujące czynności, aby uzyskać niektóre zamówienia z systemu na eksport:
$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)));
Muszę dodać coś, co nie eksportuje, jeśli zamówienie entity_id
znajduje się w niestandardowej tabeli, którą mam. Gdybym korzystał z SQL, zrobiłbym:
left join myTable as mt on main_table.entity_id = mt.entity_id
where mt.entity_id is null
Ale nie jestem pewien, jak zmodyfikować kwerendę kolekcji, aby zrobić podobnie.
Uwaga: próbowałem
$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")
ale to zmienia to, więc jest to zapytanie i chcę zwrócić kolekcję sprzedaży / zamówienia.
Czuję, że brakuje mi czegoś prostego ...
EDYTOWAĆ
Ok, próbowałem tego:
$orders->getSelect()
->joinLeft(
array("t1" => $myTable),
"main_table.entity_id = t1.entity_id",
array("admin_field_id" => "t1.id")
)
->where("t1.id is null");
Gdy echo (string)$orders->getSelect()
, zwraca zapytanie, którego oczekiwałbym i nie zwraca żadnych wyników po uruchomieniu. $orders
jednak nadal zawiera elementy. Myślałem, że to połączenie miało w tym momencie zmodyfikować kolekcję?
źródło
$orders->getSelect() ->joinLeft(array("t1" => $myTable), "main_table.entity_id = t1.entity_id", array("admin_field_id" => "t1.id")) ->where("t1.id is null")
wykluczać elementów z mojej bieżącej listy?Znalazłem przyczynę tego.
Chciałem policzyć wartości, zanim zastosowałem lewe łączenie, więc dodałem
spowodowało to jednak załadowanie kolekcji, co z kolei spowodowało, że zignorowałem lewe łączenie, nad którym pracowałem dalej. Podczas debugowania spojrzenie na var
_isCollectionLoaded
było dobrą wskazówką Fabiana.Teraz robię to, aby uzyskać liczbę kolekcji:
To pozwala mi policzyć wyniki bez ładowania
$orders
kolekcji.Uwaga: Prosimy o uwzględnienie wszelkich głosów poparcia dla powyższego postu Fabianów, ponieważ kierował mną w tej sprawie, ale czułem, że rozwiązanie uzasadnia własną odpowiedź.
źródło