Как получить имя таблицы из имени класса модели в TYPO3 extbase?

Каков наилучший способ получить имя таблицы из определенного объекта? Есть ли что-то вроде:

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

Так что вы получите tx_extkey_domain_model_myobject из Vendor\Extkey\Domain\Model\MyObject.


person Jonas    schedule 24.08.2017    source источник


Ответы (2)


Вы можете использовать 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();

Взгляните на SqlDebuggerUtility из этого репозитория github, который использует DataMapper для получения имени таблицы объекта QueryResult для отладки операторов SQL.

person Euli    schedule 24.08.2017

на 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();
person Christoph Hofmann    schedule 23.07.2019
comment
Спасибо за обновления! - person develth; 08.08.2019