持有Doctrine协会的实体

时间:2014-03-03 11:54:50

标签: php orm doctrine

我在尝试使用Doctrine持有关联实体时遇到了麻烦。

这是我自己方面的映射:(User.php)

/** @Role_id @Column(type="integer") nullable=false */
private $role_id;

/** 
 * @ManyToOne(targetEntity="Roles\Entities\Role")
 * @JoinColumn(name="role_id", referencedColumnName="id")
 */
private $role;

反面没有映射,我尝试使用(OneToMany)并且它似乎没有什么区别。

基本上,我将默认值2 (integer)传递给方法setRole_id但是当我实际去坚持导致MySQL错误的实体时它显示为空白,因为该列没有不允许nulls

修改1:

字面意思是将此持久化为role_id

$ this-> user-> setRole_id(2);

干杯,

伊万

1 个答案:

答案 0 :(得分:1)

您的映射似乎不正确。尝试按如下方式重写它:

/** 
 * @ManyToOne(targetEntity="Roles\Entities\Role")
 * @JoinColumn(name="role_id", referencedColumnName="id", nullable=false)
 */
private $role;

换句话说,您只需要将role_id描述为您关系的加入列。您无需将其映射为“普通”列。然后编写并使用如下所示的常规setter:

public function setRole(Roles\Entities\Role $role) {

    $this->role = $role;
}

使用上述代替$this->user->setRole_id(2)并保留您的用户实体。 Doctrine应自动为您在外键字段中存储正确的实体ID。