МАГЕНТО: не могу найти таблицу catalog_product. Как тогда работает $ installer-> getTable ('catalog / product')? - PullRequest
1 голос
/ 29 ноября 2011

Я просмотрел файл Mage / Catalogue / sql / catalog_setup / install-1.6.0.0.php.

часть кода:

$installer = $this;
/* @var $installer Mage_Catalog_Model_Resource_Setup */

$installer->startSetup();

/**
 * Create table 'catalog/product'
 */
$table = $installer->getConnection()
    ->newTable($installer->getTable('catalog/product'))
    ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
        'identity'  => true,
        'unsigned'  => true,
        'nullable'  => false,
        'primary'   => true,
        ), 'Entity ID')

Здесь вы можете увидеть реализацию catalog_product: $ installer-> getTable ('catalog / product'). Но я не смог найти эту таблицу в БД. Как это работает тогда? Я всегда думал, что catalog / product = catalog_product.

Ответы [ 2 ]

4 голосов
/ 29 ноября 2011

Следующая функция

getTable('catalog/product')

можно проследить до

app/code/core/Mage/Core/Model/Resource.php

проверяя public function getTableName($modelEntity), вы увидите, что логика обрабатывает также имена таблиц ресурсов:

<catalog_resource>
            <class>Mage_Catalog_Model_Resource</class>
            <deprecatedNode>catalog_resource_eav_mysql4</deprecatedNode>
            <entities>
                <product>
                    <table>catalog_product_entity</table>
                </product>

больше ресурсов об этом: Magento ORM: значение атрибута сущности; Часть 1 и Ресурсы установки Magento из Alan Storm

3 голосов
/ 29 ноября 2011

Как часто бывает в Magento, конфигурация используется.Вот стек вызовов:

  • Mage_Core_Model_Resource_Setup :: getTable ('catalog / product')
    • Mage_Core_Model_Resource :: getTableName ('catalog / product');

Когда в аргументе, переданном методу core/resource класса getTableName, присутствует символ '/', проверяется DOM конфигурации.Сначала метод разрешит узел resourceModel со следующей строкой:

$resourceModel = (string) Mage::getConfig()->getNode()->global->models->{$model}->resourceModel;

Затем класс core/resource вызывает свой метод getEntity() с узлом resourceModel, передаваемым в качестве аргумента.Этот метод просто ищет в узле разрешенной (ресурсной) модели объявление сущности (т. Е. Имя таблицы):

Mage::getConfig()->getNode()->global->models->{$model}->entities->{$entity};

В случае каталога / продукта вышеприведенное сопоставление:

Mage::getConfig()->getNode()->global->models->catalog_resource->entities->product;

Если вы посмотрите XML-файл конфигурации Mage_Catalog, вы увидите, что это подтвердилось.Причина, по которой лучше всего получить доступ к имени таблицы через конфигурацию, заключается в том, что можно указать префикс таблицы, и этот метод вернет правильное имя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...