Я создаю пользовательский модуль для сайта электронной коммерции Magento, и модуль будет центрировать вокруг нового (т.е., пользовательский) таблицу, которая имеет составной/составной первичный ключ, или скорее таблица имеет два столбца, которые составляют первичный ключ. Кто-либо знает, как создать Ваши модели моделей/ресурса на основе таблицы с первичным ключом?
Для предоставления еще нескольких подробной информации я искал несколько учебных руководств и также использовал превосходный moduleCreator сценарий. Но кажется, что все учебные руководства вращаются вокруг таблицы, имеющей PK со всего одним столбцом в нем. Что-то вроде этого:
class __Model_Mysql4_ extends Mage_Core_Model_Mysql4_Abstract {
public function _construct(){
$this->_init('/', '');
}
}
Кроме того, я просто заметил, что, смотря на модель базы данных почти все таблицы имеют единственный первичный ключ. Я понимаю, что это имеет непосредственное отношение к структуре дб EAV-стиля, но все еще действительно ли возможно использовать таблицу с составным PK? Я хочу придерживаться платформы/конвенций Magento, если это возможно. Этому препятствуют? Я должен просто изменить структуру своей пользовательской таблицы, чтобы иметь некоторый фиктивный идентификационный столбец? У меня действительно есть способность сделать это, но geez!
(Другое примечание стороны, что я думал, что упомяну, - то, что похоже, что Платформа Зенда позволяет основывать класс на таблице с составным первичным ключом (см. Пример № 20 на этой странице - о промежуточном вниз), таким образом, кажется, что платформа Magento должна также предусмотреть его... Я просто не вижу как.)
Как и большинство моделей, вдохновленных Active Record, Magento Mage_Core_Model_Abstract
не создавалась с учетом поддержки составных первичных ключей. Любые модели, наследующие от этой базы (то есть все они), наследуют это предположение. Если вы хотите использовать составные первичные ключи, у вас не получится. Ваш выбор - пойти по маршруту модели Magento и создать единственный первичный ключ («фальшивый», как вы его назвали), а затем применить уникальный индекс к таблице, ИЛИ реализовать собственный слой модели, используя базовую таблицу Zend DB, ИЛИ импортировать стороннее модельное решение в систему, которое поддерживает нужные вам функции.
Что касается Zend Framework, команда Magento использовала Zend Table Gateway Pattern для реализации уровня модели стиля Active Record для своей платформы. Zend Framework - это не стек приложений, как Cake или Rails, это набор библиотек классов, которые можно использовать для создания стеков приложений (или приложений, или многих других вещей). То, что что-то поддерживается в классах Zend Framework, не означает, что системы и приложения, использующие Zend Framework, получают это бесплатно.