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

Property (...) does not exist (Symfony 3)

在我的 Symfony 3 项目中,"users" 和 "roles" 之间存在多对多关系。

以前是可以的,现在报错了:

Property AppBundle\Entity\Role::$user does not exist

我不知道我做了什么,可能是因为 运行 一个 "php bin/console doctrine:mapping:import --force AppBundle xml" 命令。

这是用户实体的片段 class:

/**
 * @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 文档,这被命名为“单向 ManyToMany”关系。对我来说,一切看起来都很好。

当您 运行 映射命令时,您会在 AppBundle/Resources/config/doctrine 下生成映射文件,这些文件会干扰您的注释。在 Doctrine 中,每个 bundle 只能有一种类型的实体映射。多种类型往往会无声无息地失败。

这解释了为什么 "used to work"。

删除config/doctrine目录,也许清除缓存,你应该回到原来的位置。

@Cerad,回答正确。只需清除缓存 (php bin/console cache:clear),您就可以开始了!

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