【问题标题】:zf2 doctrine2 relationship properties not workingzf2教义2关系属性不起作用
【发布时间】:2012-10-22 09:54:10
【问题描述】:

我在用户实体中有以下非列属性

/**
 *
 * @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user")
 * @ORM\JoinColumn(name="companyID", referencedColumnName="id")
 */
protected $company;


/**
 *
 * @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", inversedBy="user")
 * @ORM\JoinColumn(name="roleID", referencedColumnName="id")
 */
protected $role;

我在用户表中没有列角色或公司。 但是我确实在用户表中的列 roleID 和 companyID 以及用户实体中的它们各自的属性如下

    /**
     * @ORM\Column(type="integer")
     * @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", inversedBy="user") 
     * @ORM\JoinColumn(name="roleID", referencedColumnName="id")    
     */
    protected $roleID;

    /**
     * @ORM\Column(type="integer")
     * @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user")
     * @ORM\JoinColumn(name="companyID", referencedColumnName="id")     
     */
    protected $companyID;

在用户控制器中,当我尝试使用以下行添加记录时,它成功添加了记录,但没有 roleID 和 companyID

           $userData = array("username" => $username, "pass" => $secPass,
                "salt" => $salt, "companyID" => $companyID,
                "roleID" => $roleID, "cost" => $cost
            );


            $user->populate($userData);
            $this->getEntityManager()->persist($user);
            $this->getEntityManager()->flush();

但是如果我从实体用户中删除这两个属性,那么它还会添加 roleID 和 companyID

protected $company;
protected $role;

但我还需要以上属性。我无法理解为什么会发生这种冲突,

有人遇到过这个问题吗?以及如何解决这个问题?任何的想法?

【问题讨论】:

    标签: php doctrine-orm doctrine zend-framework2


    【解决方案1】:

    如下更改用户实体中的属性

    /**
     * 
     * @ORM\Column(type="integer")
     */
    protected $roleID;
    
    /**
     * 
     * @ORM\Column(type="integer")
     */
    protected $companyID;
    
    
    /**
     *
     * @ORM\ManyToOne(targetEntity="\Auth\Entity\Company", inversedBy="user")
     * @ORM\JoinColumn(name="companyID", referencedColumnName="id")
     */
    protected $company;
    
    
    /**
     *
     * @ORM\ManyToOne(targetEntity="\Auth\Entity\Role", inversedBy="user")
     * @ORM\JoinColumn(name="roleID", referencedColumnName="id")
     */
    protected $role;
    

    然后在您的用户控制器中执行以下添加。它对我有用

     $company = $this->getEntityManager()->find('Auth\Entity\Company', $companyID);                
        $role = $this->getEntityManager()->find('Auth\Entity\Role', $roleID);                
    
        $user->username = $username;
        $user->pass = $secPass;
        $user->salt = $salt;
        $user->company = $company;
        $user->role = $role;
        $user->cost = $cost;                
    
        $this->getEntityManager()->persist($user);
        $this->getEntityManager()->flush();
    

    【讨论】:

    • AFAIK,您的实体属性中不应该有 id。
    • 你不需要映射这些列$companyID$roleID,你可以使用$this->company->getId()$this->role->getId()。如果您经常需要,也可以在实体中创建代理方法。
    猜你喜欢
    • 2016-02-28
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多