从类对象中获取实体名称

Mat*_*att 16 symfony doctrine-orm

我有以下代码:

namespace Acme\StoreBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Acme\StoreBundle\Entity\User
 *
 * @ORM\Table(name="users")
 * @ORM\Entity()
 */
class User {
...
}

$user = new User();
Run Code Online (Sandbox Code Playgroud)

有谁知道我现在如何AcmeStoreBundle:UserUser对象中获取实体名称()?

ben*_*ske 46

这应该始终有效(不返回Proxy类):

$em = $this->container->get('doctrine')->getEntityManager(); 
$className = $em->getClassMetadata(get_class($object))->getName();
Run Code Online (Sandbox Code Playgroud)

由于getClassMetadata已被弃用,您现在可以使用getMetadataFor

$entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($object))->getName();
Run Code Online (Sandbox Code Playgroud)


Woj*_*ski 9

PHP get_class()函数将返回User和命名空间(请参阅php docs中的注释).

  • 小心使用方法正弦它不会每次都有效.Doctrine使用一些缓存并生成代理类.如果您使用thins方法,您将拥有类似"Proxy\AcmeStoreBundleEntity\Proxy"的内容 (3认同)

Vig*_*jis 7

不推荐使用getClassMetadata(),将来会删除它.改为使用getMetadataFor():

$entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($entity))->getName();
Run Code Online (Sandbox Code Playgroud)

或者完整的功能:

/**
 * Returns Doctrine entity name
 *
 * @param mixed $entity
 *
 * @return string
 * @throws \Exception
 */
private function getEntityName($entity)
{
    try {
        $entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($entity))->getName();
    } catch (MappingException $e) {
        throw new \Exception('Given object ' . get_class($entity) . ' is not a Doctrine Entity. ');
    }

    return $entityName;
}
Run Code Online (Sandbox Code Playgroud)