Какова цель метода GetTable()?


У меня есть вопрос о методе SetupInterface getTable($tableName).

Какова его роль? Почему я должен использовать этот метод вместо прямого использования имени таблицы, с которой я хочу работать?

Это на случай, если мне понадобится работать с разными базами данных?

Author: Raphael at Digital Pianism, 2017-02-16

1 answers

Это на случай, если мне понадобится работать с разными базами данных?

Определенно нет

Какова его роль? Почему я должен использовать этот метод вместо прямого использования имени таблицы, с которой я хочу работать?

Причина в том, что Magento поддерживает табличные префиксы из коробки. Это основная цель этого метода, так как если вы работаете с базой данных с табличными префиксами, то прямой вызов исходного имени таблицы нарушит вашу код.

К вашему сведению, вот реализация этого метода:

public function getTable($tableName, $connectionName = ResourceConnection::DEFAULT_CONNECTION)
{
    $cacheKey = $this->_getTableCacheName($tableName);
    if (!isset($this->tables[$cacheKey])) {
        $this->tables[$cacheKey] = $this->resourceModel->getTableName($tableName, $connectionName);
    }
    return $this->tables[$cacheKey];
}

И если вы проверите getTableName из модели ресурсов:

public function getTableName($modelEntity, $connectionName = self::DEFAULT_CONNECTION)
{
    $tableSuffix = null;
    if (is_array($modelEntity)) {
        list($modelEntity, $tableSuffix) = $modelEntity;
    }

    $tableName = $modelEntity;

    $mappedTableName = $this->getMappedTableName($tableName);
    if ($mappedTableName) {
        $tableName = $mappedTableName;
    } else {
        $tablePrefix = $this->getTablePrefix();
        if ($tablePrefix && strpos($tableName, $tablePrefix) !== 0) {
            $tableName = $tablePrefix . $tableName;
        }
    }

    if ($tableSuffix) {
        $tableName .= '_' . $tableSuffix;
    }
    return $this->getConnection($connectionName)->getTableName($tableName);
}
 6
Author: Raphael at Digital Pianism, 2017-02-16 13:26:59