我正在使用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”从未导入。您是否忘记为此注释添加“使用”语句?
答案 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(...)
*/