Doctrine 2.0 - 语义错误

时间:2014-02-13 12:52:02

标签: php symfony orm doctrine-orm mapping


我正在尝试映射我的实体,但是当我执行架构时,我总是会收到此错误:更新,删除或创建。所以我尝试了很多解决方案,例如将这一行添加到我的autoload.php:

AnnotationRegistry::registerFile(__DIR__.'/../vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/AnnotationDriver.php');

但它仍然不起作用......这是冲突中的代码:
文件实体:

/**
 * @var integer
 *
 * @ORM\Column(type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 * @ORM\OnetoMany(targetEntity="Intranet\ExampleBundle\Entity\File_Liaison", mappedBy="idFile", cascade={"persist"})
 * @ORM\JoinColumn(name="id", referencedColumnName="idFile")
 */
    private $id;

File_Liaison实体:

/**
 * @var integer
 *
 * @ORM\ManyToOne (targetEntity="Intranet\ExampleBundle\Entity\File", inversedBy="id")
 * @ORM\JoinColumn (name="idFile", referencedColumnName="id")
 */
private $idFile;

这是错误:

[Doctrine\Common\Annotations\AnnotationException]
[Semantical Error] The annotation "@Doctrine\ORM\Mapping\OnetoMany" in property Intranet\ExampleBundle\Entity\File::$id does not exist, or could not be auto-loaded.

我读了很多关于这个问题的话题,但我找不到任何有用的东西。 谢谢您的帮助 ! : - )

2 个答案:

答案 0 :(得分:0)

错误在于您尝试添加一个文件有多个File_liaison的关系,因此File端应该有一个File_liaison集合。情况并非如此,因为$id不能同时是自动生成的整数和实体集合。

尝试清理$id并在文件实体中添加属性,例如

/**
 * @ORM\OnetoMany(targetEntity="Intranet\ExampleBundle\Entity\File_Liaison", mappedBy="idFile", cascade={"persist"})
 * 
 */
    private $liaisons;

然后实现适当的addLiaison,removeLiaison和getLiaisons方法

/**
 * Add liaison
 *
 * @param \Intranet\ExampleBundle\Entity\File_Liaison $liaison
 */
public function addLiaison(\Intranet\ExampleBundle\Entity\File_Liaison $liaison)
{
    $this->liaisons[] = $liaison;
}

/**
 * Get liaisons
 *
 * @return \Doctrine\Common\Collections\Collection 
 */
public function getLiaisons()
{
    return $this->liaisons;
}

最后为$idFile

更新File_liaison inversedBy
/**
 * @var integer
 *
 * @ORM\ManyToOne (targetEntity="Intranet\ExampleBundle\Entity\File", inversedBy="liaisons")
 * @ORM\JoinColumn (name="idFile", referencedColumnName="id")
 */
private $idFile;

显然这没有经过测试,但它可以让你很好地了解你做错了什么。

答案 1 :(得分:0)

感谢您的帮助!
错误仍然出现但我解决了这个问题!文件实体出了点问题。我改变了它:

    /**
 * @ORM\Id
 * @var integer
 * 
 * @ORM\Column(name="refFile", type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 * 
 * @ORM\OneToMany(targetEntity="Intranet\ExampleBundle\Entity\File_Liaison", mappedBy="idFile", cascade={"persist"})
 * @ORM\JoinColumn(name="idFile", referencedColumnName="refFile")
 */
private $refFile;