如何从 TYPO3 extbase 中的模型 class 名称中获取 table 名称?

How to get the table name from model class name in TYPO3 extbase?

从特定对象获取 table 名称的最佳方法是什么? 有没有类似的东西:

$tableName = Utility::doSomeMagic($object);

这样你就可以从 Vendor\Extkey\Domain\Model\MyObject 得到 tx_extkey_domain_model_myobject。

您可以使用 DataMapper 获取模型的 table 名称。存储库在内部使用它(至少间接地)来告诉他们正在处理什么。您可以获得 DataMapper 的实例并像这样使用它:

$className = \MyVendor\MyExt\Domain\Model\SomeModel::class;
$dataMapper = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper::class);
$tableName = $dataMapper->getDataMap($className)->getTableName();

查看 this github repository 中的 SqlDebuggerUtility,它使用 DataMapper 获取 QueryResult 对象的 tablename 以调试 SQL 语句。

关于 TYPO3 9.x

你需要

$className = get_class($this);
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
$dataMapper = $objectManager->get(
    \TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper::class
);
$tableName = $dataMapper->getDataMap($className)->getTableName();