В настоящее время я работаю в интернет-магазине, используя модуль аукциона. Этот аукционный модуль имеет собственный набор лиц, представляющих аукцион и их заявки. Основным объектом является модель ProductAuction. Эта модель имеет отношение к модели Каталог_Продукт Magento.
Везде, где загружается коллекция, товары должны быть загружены после загрузки коллекции ProductAuctions.
Теперь мне нужно написать несколько экзотических запросов для загрузки определенных наборов аукционов в сочетании с категорией и поисковыми запросами. Теперь мне сначала нужно загрузить набор товаров, принадлежащих к данной категории и поисковому запросу, затем загрузить активные аукционы, принадлежащие к набору соответствующих товаров.
В некоторых случаях я не могу повторно использовать набор загруженных продуктов, а затем должен выполнить другой запрос для загрузки продуктов, соответствующих аукционам.
В худшем случае мне придется выполнить три больших запроса и обработать наборы результатов, которые должны быть возможны в одном запросе.
Возможно ли в Magento загружать связанные сущности внутри коллекции, так же, как приличный ORM делал бы с отношениями One-2-One, Many-2-One и другими?
Я не нашел ни одного примера этого, но не могу представить, что это невозможно в Magento.
Спасибо за любую помощь в этом.
== РЕДАКТИРОВАТЬ ==
Небольшой пример кода, чтобы показать, что я делаю в данный момент:
/**
* Build the correct query to load the product collection for
* either the search result page or the catalog overview page
*/
private function buildProductCollectionQuery() {
/**
* @var Mage_CatalogSearch_Model_Query
*/
$searchQuery = Mage::helper('catalogsearch')->getQuery();
$store_id = Mage::app()->getStore()->getId();
$productIds = Mage::helper('auction')->getProductAuctionIds($store_id);
$IDs = array();
$productIds = array();
$collection = Mage::getModel('auction/productauction')
->getCollection()
->addFieldToFilter(
'status', array('in' => array(4))
);
if (count($collection)) {
foreach ($collection as $item) {
$IDs[] = $item->getProductId();
}
}
$collection = Mage::getResourceModel('catalog/product_collection')
->addFieldToFilter('entity_id',array('in'=> $IDs ))
->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
->addMinimalPrice()
->addTaxPercents()
->addStoreFilter();
if( $searchQuery != null ) {
$collection->addAttributeToFilter(array(
array('attribute' => 'name', 'like'=>'%' . $searchQuery->getQueryText() . '%'),
array('attribute' => 'description', 'like'=>'%' . $searchQuery->getQueryText() . '%')
)
);
// @TODO This should be done via the Request object, but the object doesn't see the cat parameter
if( isset($_GET['cat']) ) {
$collection->addCategoryFilter(Mage::getModel('catalog/category')->load($_GET['cat']) );
}
}
return $collection;
}