/** * Adding join statement to collection select instance * * @param string $method * @param object $attribute * @param string $tableAlias * @param array $condition * @param string $fieldCode * @param string $fieldAlias * @return Mage_Eav_Model_Entity_Collection_Abstract */ protected function _joinAttributeToSelect($method, $attribute, $tableAlias, $condition, $fieldCode, $fieldAlias) { if (isset($this->_joinAttributes[$fieldCode]['store_id'])) { $store_id = $this->_joinAttributes[$fieldCode]['store_id']; } else { $store_id = $this->getStoreId(); } $adapter = $this->getConnection(); if ($store_id != $this->getDefaultStoreId() && !$attribute->isScopeGlobal()) { /** * Add joining default value for not default store * if value for store is null - we use default value */ $defCondition = '('.implode(') AND (', $condition).')'; $defAlias = $tableAlias . '_default'; $defAlias = $this->getConnection()->getTableName($defAlias); $defFieldAlias= str_replace($tableAlias, $defAlias, $fieldAlias); $tableAlias = $this->getConnection()->getTableName($tableAlias); $defCondition = str_replace($tableAlias, $defAlias, $defCondition); $defCondition.= $adapter->quoteInto( " AND " . $adapter->quoteColumnAs("$defAlias.store_id", null) . " = ?", $this->getDefaultStoreId()); $this->getSelect()->$method( array($defAlias => $attribute->getBackend()->getTable()), $defCondition, array() ); $method = 'joinLeft'; $fieldAlias = $this->getConnection()->getCheckSql("{$tableAlias}.value_id > 0", $fieldAlias, $defFieldAlias); $this->_joinAttributes[$fieldCode]['condition_alias'] = $fieldAlias; $this->_joinAttributes[$fieldCode]['attribute'] = $attribute; } else { $store_id = $this->getDefaultStoreId(); } $condition[] = $adapter->quoteInto( $adapter->quoteColumnAs("$tableAlias.store_id", null) . ' = ?', $store_id); return parent::_joinAttributeToSelect($method, $attribute, $tableAlias, $condition, $fieldCode, $fieldAlias); }
/** * Adding join statement to collection select instance * * @param string $method * @param object $attribute * @param string $tableAlias * @param array $condition * @param string $fieldCode * @param string $fieldAlias * @return Mage_Eav_Model_Entity_Collection_Abstract */ protected function _joinAttributeToSelect($method, $attribute, $tableAlias, $condition, $fieldCode, $fieldAlias) { if (isset($this->_joinAttributes[$fieldCode]['store_id'])) { $store_id = $this->_joinAttributes[$fieldCode]['store_id']; } else { $store_id = $this->getStoreId(); } if ($store_id != $this->getDefaultStoreId() && !$attribute->isScopeGlobal()) { /** * Add joining default value for not default store * if value for store is null - we use default value */ $defCondition = '(' . join(') AND (', $condition) . ')'; $defAlias = $tableAlias . '_default'; $defFieldCode = $fieldCode . '_default'; $defFieldAlias = str_replace($tableAlias, $defAlias, $fieldAlias); $defCondition = str_replace($tableAlias, $defAlias, $defCondition); $defCondition .= $this->getConnection()->quoteInto(" AND {$defAlias}.store_id=?", $this->getDefaultStoreId()); $this->getSelect()->{$method}(array($defAlias => $attribute->getBackend()->getTable()), $defCondition, array()); $method = 'joinLeft'; $fieldAlias = new Zend_Db_Expr("IF({$tableAlias}.value_id>0, {$fieldAlias}, {$defFieldAlias})"); $this->_joinAttributes[$fieldCode]['condition_alias'] = $fieldAlias; $this->_joinAttributes[$fieldCode]['attribute'] = $attribute; } else { $store_id = $this->getDefaultStoreId(); } $condition[] = $this->getConnection()->quoteInto("{$tableAlias}.store_id=?", $store_id); return parent::_joinAttributeToSelect($method, $attribute, $tableAlias, $condition, $fieldCode, $fieldAlias); }