6

エンティティからテーブル名を取得するのとは逆のことをしたいと思います。

テーブル名、つまりそのテーブルにマップされているエンティティの名前からエンティティ名を取得したいと思います。

db列についても同じことが言えます。マップされているエンティティのフィールド名を取得する方法は?

4

1 に答える 1

5

登録されているすべてのエンティティクラス名を通過するため、最適ではありませんが、私ができたことは次のとおりです。

/**
 * @param \Doctrine\ORM\EntityManager $em Entity manager
 * @param string $table Table name
 * @return string Entity class name, null if not found
 */
protected function getClassNameFromTableName($em, $table)
{
    // Go through all the classes
    $classNames = $em->getConfiguration()->getMetadataDriverImpl()->getAllClassNames();
    foreach ($classNames as $className) {
        $classMetaData = $em->getClassMetadata($className);
        if ($table == $classMetaData->getTableName()) {
            return $classMetaData->getName();
        }
    }
    return null;
}

/**
 * @param \Doctrine\ORM\EntityManager $em Entity manager
 * @param string $className
 * @param string $column
 * @return string Field name, null if not found
 */
protected function getFieldNameFromColumnName($em, $className, $column)
{
    $classMetaData = $em->getClassMetadata($className);
    if ($classMetaData) {
        return $classMetaData->getFieldForColumn($column);
    }
    return null;
}
于 2012-12-14T08:49:51.537 に答える