Какова цель метода GetTable()?
У меня есть вопрос о методе SetupInterface
getTable($tableName)
.
Какова его роль? Почему я должен использовать этот метод вместо прямого использования имени таблицы, с которой я хочу работать?
Это на случай, если мне понадобится работать с разными базами данных?
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);
}