属性(...)不存在(Symfony 3)

8
在我的Symfony 3项目中,我有一个"用户"和"角色"之间的多对多关系。它以前可以正常工作,但现在出现了错误:
Property AppBundle\Entity\Role::$user does not exist

我不知道自己做了什么,可能是因为运行了一个“php bin/console doctrine:mapping:import --force AppBundle xml”命令。
以下是User实体类的片段:
/**
 * @ORM\Table(name="user")
 * @ORM\Entity(repositoryClass="AppBundle\Repository\UserRepository")
 */
class User implements AdvancedUserInterface, \Serializable {

    /**
     * @ORM\Column(type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     *
     * @ORM\ManyToMany(targetEntity="AppBundle\Entity\Role", cascade = {"persist"})
     * @ORM\JoinTable(name="user_role")
     */
    private $roles;

如您所见,这与“角色”实体有关系。

另一方面,“角色”实体不包含任何关系信息,根据本文应该可以正常工作:

https://knpuniversity.com/screencast/symfony2-ep3/many-to-many-relationship

它曾经可以工作,现在却不行了,我不知道为什么。

据我所了解,根据Symfony文档,这被称为'单向多对多关系'。对我来说,一切看起来都很好。


1
请确保您的 AppBundle\Entity\Role 类中有一个名为 $user 的公共属性或一个名为 getUser() 的公共 getter 方法。 - felipsmartins
1
也许你可以检查一下 php bin/console doctrine:schema:valid 的输出? - Dominykas55
@felipsmartins - 但是根据这个文档,我没有:http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-unidirectional - 这是一个单向的多对多关系。而且,此外,它以前可以工作 o_O - konrad_firm
@Dominykas55,错误提示是“类 'AppBundle\Entity\Sessions' 不存在”,实际上数据库中确实有一个名为“sessions”的表,但我不想为它创建实体... - konrad_firm
1
当您运行映射命令时,会在AppBundle/Resources/config/doctrine下生成映射文件,这些文件会干扰您的注释。请删除该目录。 - Cerad
@Cerad 哇,它运行了!谢谢。如果您把这作为答案添加,我会将其标记为已接受的答案。谢谢大家。 - konrad_firm
2个回答

8
当您运行映射命令时,您在AppBundle/Resources/config/doctrine下生成了映射文件,这些文件会干扰您的注释。在Doctrine中,每个bundle只能有一种类型的实体映射。多种类型往往会默默失败并且令人困惑。
这就解释了为什么“以前可以工作”。
删除config/doctrine目录,清除缓存,您应该回到之前的状态。

2

@Cerad,回答是正确的。 只需清除缓存(php bin/console cache:clear),您就可以继续使用了!

symfony.com/doc/current/console/usage.html


(说明:原文为英文,已经翻译成中文,并保留了html标签,建议在网页上查看以获得更好的阅读体验)

3
虽然我很感激你对我的信任,但清除缓存并不能删除导致问题的额外yml/xml映射文件。 - Cerad
我正在使用Symfony 4,清除缓存就足够了。 - vimuth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接