从特定对象获取表名的最佳方法是什么? 是否有类似的东西:
$tableName = Utility::doSomeMagic($object);
这样你就可以从Vendor \ Extkey \ Domain \ Model \ MyObject获得tx_extkey_domain_model_myobject。
答案 0 :(得分:4)
您可以使用DataMapper获取模型的表名。它由存储库内部使用(至少间接地)用于说明它们正在处理什么。你可以得到一个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对象的表名来调试SQL语句。
答案 1 :(得分:0)
在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();