2016-09-27 72 views
3

我正在使用Doctrine 2作为Slim 3的ORM,但当我尝试实现双向关系时,我一直陷在对象映射部分中属性中的注释“@OneToMany”从未导入(Doctrine2)

/** 
* 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

输出是:

[主义\ COMMON \注解\ AnnotationException] [语义错误]注释 “@OneToMany” 我n属性App \ Entity \ UserRoles :: $用户从未导入。你可能忘记为这个注释添加一个“使用”语句吗?

+0

我已删除由于计算器的码约束到文本比setter和getter和各个字段 –

+1

它是“@ORM \一对多”。有关详细信息,请参阅您的'use'语句。 –

+0

@AlexBlex表示。你也缺少''ManyToOne''和''JoinColumn''的@ORM \'' –

回答

12

学说类等

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(...) 
*/ 
+0

那么你的问题==解决方案? – danopz

+0

仍然没有工作..得到相同的错误 –

+0

你有你的实体上使用声明? – danopz