/** * @param Mana_Db_Model_Formula_Context $context * @param Mana_Db_Model_Formula_Entity $entity */ public function select($context, $entity) { switch ($context->getMode()) { default: $context->setMode($this->getName())->setEntityHelper($this); /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); $context->incrementPrefix(); $alias = explode('.', $entity->getAlias()); $alias = array_pop($alias); $aggregateContext = $context->createChildContext()->setPrefix($context->getPrefix())->setEntity($entity->getEntity())->setProcessor($entity->getProcessor())->setAlias($alias); $select = $aggregateContext->getSelect()->from(array($aggregateContext->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity->getEntity()))), null); if ($entity->getJoin()) { foreach ($entity->getJoin() as $alias => $join) { $method = isset($join['type']) ? 'join' . ucfirst($join['type']) : 'joinInner'; $select->{$method}(array($aggregateContext->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($join['entity']))), $aggregateContext->resolveAliases($join['on']), null); } } if ($entity->getOrder()) { $select->order($aggregateContext->resolveAliases($entity->getOrder(), false)); } if ($entity->getWhere()) { $select->where($aggregateContext->resolveAliases($entity->getWhere())); } $context->setEntity($entity->getEntity())->setProcessor($entity->getProcessor())->setAlias($entity->getAlias())->setAggregateContext($aggregateContext); break; } }