我有以下代码:
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();
有人知道我现在如何从AcmeStoreBundle:User
对象获取实体名称(User
)吗?
答案 0 :(得分:46)
这应该始终有效(不返回Proxy类):
$em = $this->container->get('doctrine')->getEntityManager();
$className = $em->getClassMetadata(get_class($object))->getName();
不推荐getClassMetadata
,您现在可以使用getMetadataFor
$entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($object))->getName();
答案 1 :(得分:9)
PHP get_class()
函数将返回User
和命名空间(请参阅php docs中的注释)。
答案 2 :(得分:7)
不推荐使用getClassMetadata(),将来会删除它。改为使用getMetadataFor():
$entityName = $this->em->getMetadataFactory()->getMetadataFor(get_class($entity))->getName();
或完整的功能:
/**
* 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;
}
答案 3 :(得分:0)
您可以使用php的 instanceOf 运算符:
if($a instanceof MyClass) { /*code*/ }
https://www.php.net/manual/pt_BR/language.operators.type.php