属性中的注释“@OneToMany”从未导入(Doctrine2)

时间:2016-09-27 09:25:11

标签: php symfony doctrine-orm doctrine slim

我正在使用Doctrine 2作为Slim 3的ORM,但是当我尝试实现双向关系时,我一直陷入对象映射部分

/**
 * Class Resource
 * @package App
 * @ORM\Entity
 * @ORM\Table(name="users", uniqueConstraints={@ORM\UniqueConstraint(name="user_id", columns={"user_id"})}))
 */
class User
{
    /**
     * @ORM\ManyToOne(targetEntity="UserRoles", inversedBy="users")
     * @ORM\JoinColumn(name="role_id", referencedColumnName="user_role_id")
     */
    protected $user_role;
}

/**
 * Class Resource
 * @package App
 * @ORM\Entity
 * @ORM\Table(name="user_roles", uniqueConstraints={@ORM\UniqueConstraint(name="user_role_id", columns={"user_role_id"})}))
 */
class UserRoles
{
    /**
     * @ORM\OneToMany(targetEntity="User", mappedBy="user_role")
     */
    protected $users;

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }
}    

我在尝试php vendor/bin/doctrine orm:schema-tool:update --force

时遇到异常

输出结果为:

  

[Doctrine \ Common \ Annotations \ AnnotationException] [语义错误]属性App \ Entity \ UserRoles :: $ users中的注释“@OneToMany”从未导入。您是否忘记为此注释添加“使用”语句?

1 个答案:

答案 0 :(得分:20)

这样的学说类

Doctrine\ORM\Mapping命名空间的一部分。

您应该使用ORM作为别名导入此命名空间。然后,您应该在这些类的前面添加@ORM作为注释,以使它们起作用。

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\ManyToOne(...)
 * @ORM\JoinColumn(...)
 */

如果您只想使用这些类中的每一个,则必须单独导入每个类。

use Doctrine\ORM\Mapping\ManyToOne;
use Doctrine\ORM\Mapping\JoinColumn;

/**
 * @ManyToOne(...)
 * @JoinColumn(...)
 */