Doctrine orm 原则2一对多关系

Doctrine orm 原则2一对多关系,doctrine-orm,zend-framework2,one-to-many,Doctrine Orm,Zend Framework2,One To Many,我有以下资料: 用户有一个组,组可以有多个用户 使用者 用户实体中不需要$GRP_ID,它已经与$group关系映射。条令自动处理ID。 另外,您的命名约定看起来有点奇怪。通常,您应该使用lowe camel case来避免出现奇怪的错误 例如: $USR_代码应该是$usrCode->以匹配getter/setter:setUsrCode,getUsrCode 刚刚注意到:你没有任何二传手。您必须使用命名约定为属性定义setter,请参见上面的示例 编辑: 您可以使用orm符号映射列: /**

我有以下资料:

用户有一个组,组可以有多个用户

使用者


用户实体中不需要$GRP_ID,它已经与$group关系映射。条令自动处理ID。 另外,您的命名约定看起来有点奇怪。通常,您应该使用lowe camel case来避免出现奇怪的错误

例如: $USR_代码应该是$usrCode->以匹配getter/setter:setUsrCode,getUsrCode

刚刚注意到:你没有任何二传手。您必须使用命名约定为属性定义setter,请参见上面的示例

编辑: 您可以使用orm符号映射列:

/**
*
* @ORM\Column(name="USR_CODE", type="string")
*/
private $usrCode;
是的,您需要设置器,否则条令将无法设置值

您还需要addUser和removeUser函数,因为user是一个集合:

public function addUsers(Collection $users)
{
    foreach($users as $user)
    {
        if( ! $this->users->contains($user))
        {
            $this->users->add($user);
            $user->setGroup($this);
        }
    }
}

public function removeUsers(Collection $users)
{
    foreach($users as $user)
    {
        if($this->users->contains($user)){
            $this->users->remove($user);
            $user->setGroup(null);
        }
    }
}

为什么在用户类中有一个额外的$GRP_ID?额外的?我只有一个$GRP\U ID来匹配用户组您已经通过@ORM\JoinColumnname=GRP\U ID,referenceColumnName=GRP\U ID在$group中指定了GRP\U ID。对于代理,它将根据需要自动加载相应的实体。例如,试试$data->getGroup->getCode。我明白了,但我想了解的是,为什么在某些情况下,我会得到一些自动生成的代理,有时我会得到一个真实的模型对象。我知道命名约定非常奇怪,但我正在将原则映射到一个无法编辑的旧oracle数据库,因此,我只是试图使我的代码适应现有的数据库。水合器是否需要设置器?因为在理想情况下,我不希望在使用视图时实现它们,因为视图不能被pushedok编辑,您可以在编辑中看到我的代码,但我仍然得到代理而不是对象,即使我将加载设置为“急切”而不是“懒惰”,所以我猜问题来自关系查询检索代码中未声明的某些列,我有点迷路了:/这是正常行为,doctrine将代理放在通常关联对象的位置。我认为为了提高性能,您应该能够像使用真实对象一样使用代理对象注意:您无意中在用户实体中发布了组实体。另请看我的第二个编辑添加和删除功能