/** * @param Mana_Db_Model_Formula_Context $context * @param SimpleXMLElement $selectXml * @return Varien_Db_Select */ public function createSelect($context, $selectXml) { /* @var $dbHelper Mana_Db_Helper_Data */ $dbHelper = Mage::helper('mana_db'); /* @var $resource Mana_Db_Resource_Formula */ $resource = Mage::getResourceSingleton('mana_db/formula'); $select = $context->getSelect(); /* @var $fromXml SimpleXMLElement */ /** @noinspection PhpUndefinedFieldInspection */ $fromXml = $selectXml->from; foreach ($fromXml->children() as $alias => $definition) { $entity = $alias == 'primary' ? $context->getPrimaryEntity() : (string) $definition->entity; $select->from(array($context->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity))), null); } if (isset($selectXml->join)) { $joinXml = $selectXml->join; /* @var $joinXml SimpleXMLElement */ foreach ($joinXml->children() as $alias => $definition) { $method = isset($definition->type) ? 'join' . ucfirst($definition->type) : 'joinInner'; $entity = $alias == 'primary' ? $context->getPrimaryEntity() : (string) $definition->entity; $select->{$method}(array($context->registerAlias($alias) => $resource->getTable($dbHelper->getScopedName($entity))), $context->resolveAliases((string) $definition->on), null); } } if (isset($selectXml->order)) { $select->order($context->resolveAliases((string) $selectXml->order, false)); } if (isset($selectXml->where)) { $select->where($context->resolveAliases((string) $selectXml->where)); } if ($formula = $context->getOption('entity_filter_formula')) { /* @var $selector Mana_Db_Helper_Formula_Selector */ $selector = Mage::helper('mana_db/formula_selector'); $selector->filterFormula($context, $this->parse($formula), $context->getOption('entity_filter_id')); } return $select; }