我使用Symfony 3从现有项目开发Web应用程序超过8年。 因此我继承了现有的模型。
某些实体拥有此字段
/**
* @var integer
*
* @ORM\Column(name="FourID_Site", type="bigint", nullable=true)
*/
private $fouridSite;
还有其他人
/**
* @var \FourListe
*
* @ORM\ManyToOne(targetEntity="FourListe")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="FourID_Site", referencedColumnName="FourID")
* })
*/
private $fouridSite;
我有一个方法,在所有persist和flush之前调用doctrine方法自动更新某些字段。
if (property_exists(get_class($entity), 'fouridSite')) {
$entity->setFouridSite($this->current_user->getFouridSiteutilisateur());
}
if (property_exists(get_class($entity), 'majlogin')) {
$entity->setMajlogin($this->current_user->getLogin());
}
if (property_exists(get_class($entity), 'majdate')) {
$entity->setMajdate(new \DateTime());
}
问题:当 $ fouridSite 为整数时,此代码会抛出错误,因为我无法分配实体 ($ this-> current_user-> getFouridSiteutilisateur()返回一个FourListe实体)当doctrine想要一个整数时。这很正常。
本机php方法get type()在这种情况下不能使用,因为它返回NULL。
那么,通过注释,有一种方法可以知道$ fourisSite是实体还是整数?
感谢您的想法或潜力任何建议
答案 0 :(得分:1)
根据更新挂钩的位置,您可以使用它来了解列的类型:
$em = $this->get('doctrine')->getManager();
$metadata = $em->getClassMetadata(get_class($entity));
$fieldMetadata = $metadata->fieldMappings['fouridSite'];
// Catch the type
$fieldType = $fieldMetadata['type'];
然后在此类型上添加一些检查以注册好的值 希望您可以从您的方法访问学说服务。