访问Symfony2中的相关实体

时间:2014-05-06 23:17:26

标签: php symfony doctrine-orm

我有一个View实体,它引用了一个名为ViewVersion的关联实体。但是,如果我将变量命名为viewVersion以外的其他变量,例如只是简单的version,然后我收到一个错误:

Neither the property "viewVersion" nor one of the methods "getViewVersion()", "isViewVersion()", "hasViewVersion()", "__get()" exist and have public access in class "Gutensite\CmsBundle\Entity\View\View".

所有getter和setter都是通过php app/console doctrine:generate:entities创建的,但它们适用于getVersion()而不是getViewVersion()

问题:那么,是否有一些潜规则规定关联实体的名称必须与其类名相同?

实体定义

/**
* @ORM\Entity
* @ORM\Table(name="view")
* @ORM\Entity(repositoryClass="Gutensite\CmsBundle\Entity\View\ViewRepository")
*/
class View extends Entity\Base {

    /**
    * @ORM\OneToOne(targetEntity="\Gutensite\CmsBundle\Entity\View\ViewVersion", inversedBy="view", cascade={"persist", "remove"}, orphanRemoval=true)
    * @ORM\JoinColumn(name="versionId", referencedColumnName="id")
    */
    protected $version;

    /**
     * @ORM\Column(type="integer", nullable=true)
     */
    protected $versionId = NULL;
}

1 个答案:

答案 0 :(得分:0)

仅供参考,关联实体的变量可以是您想要的任何内容。

这是由仍然引用" viewVersion"的预定义formType引起的。形式$ builder-> add()中的第一个变量是对实体中特定变量的引用。我在那里列出了viewVersion,当我审核我的代码时,我认为它只是一个通用引用(没有任何要求)或者可能引用了Entity类,所以我没有改变它:

$builder->add('viewVersion', new ViewVersionType(), array(
    'label' => false
));

此问题的解决方案是将viewVersion更改为version,以便它引用实体上的实际变量。显然...

$builder->add('version', new ViewVersionType(), array(
    'label' => false
));