Doctrine ORM ManyToOne Inverse 不起作用

Posted

技术标签:

【中文标题】Doctrine ORM ManyToOne Inverse 不起作用【英文标题】:Doctrine ORM ManyToOne Inverse not working 【发布时间】:2018-11-29 19:16:46 【问题描述】:

我有一个双向多对一对多关系,只在一个方向上工作,有人可以帮忙吗?为了清晰起见,我试图将示例精简为最少的代码。

Question 实体可以有多个 Answer 实体。

问题实体

class CwEmployeeQuestion

    public function __construct()
    
        $this->cw_employee_answers = new \Doctrine\Common\Collections\ArrayCollection();
    

    /**
     * @ORM\Column(type="guid")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     */
    protected $id;

    /** 
     * @ORM\OneToMany(targetEntity="Fitchek\Entity\Corporate\CwEmployeeAnswer", mappedBy="cw_employee_question")
    */
    protected $cw_employee_answers;

    /**
     * Get CwEmployeeAnswer
     * 
     * @return \Doctrine\Common\Collections\Collection
    */
    public function getCwEmployeeAnswer()
    
        return $this->cw_employee_answers;
    

回答实体

class CwEmployeeAnswer

    /**
     * @ORM\Column(type="guid")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     */
    protected $id;

    /**
     * Many CwEmployeeAnswer have One CwEmployeeQuestion.
     * 
     * @var \Fitchek\Entity\Corporate\CwEmployeeQuestion $cw_employee_question
     * 
     * @ORM\ManyToOne(targetEntity="Fitchek\Entity\Corporate\CwEmployeeQuestion", inversedBy="cw_employee_answer")
     * @ORM\JoinColumn(name="cw_employee_question", referencedColumnName="id")
     */
    protected $cw_employee_question;

    /**
     * Set $cw_employee_question
     *
     * @param   \Fitchek\Entity\Corporate\CwEmployeeQuestion $cw_employee_question
     * @return  CwEmployeeAnswer
     */
    public function setCwEmployeeQuestion(?\Fitchek\Entity\Corporate\CwEmployeeQuestion $cw_employee_question = null): self
    
        $this->cw_employee_question = $cw_employee_question;

        return $this;
    

    /**
     * Get $cw_employee_question
     *
     * @return \Fitchek\Entity\Corporate\CwEmployeeQuestion
     */
    public function getCwEmployeeQuestion(): ?CwEmployeeQuestion
    
        return $this->cw_employee_question;
    

    /**
     *
     * @inheritdoc
     *
     * @param   JSON                $json, the request JSON to create a new CwEmployeeAnswer
     * @return  CwEmployeeAnswer    the newly created CwEmployeeAnswer
     */
    public function createFromData($json, $cw_employee_question = null)
    
        $this->setCwEmployeeQuestion($cw_employee_question);

        return $this;
    

当我尝试方向 answer->question 时,它工作正常,并返回给我一个答案列表,其中包含作为 JSON 一部分的相关问题。例如:

[
   "id": 1
    "name": "answer 1",
    "question" : 
      "name": "question 1"
    
  
  ...
]

但是,当查询另一个方向以获取所有问题及其答案作为返回 JSON 的一部分时,问题数组返回为 null。例如:

[
   "id": 1
    "name": "question 1",
    "answers": null
  
  ...
]

当我想看到的是:

[
   "id": 1
    "name": "question 1",
    "answers" : [
      
        "name": "answer 1"
      ,
     
        "name": "answer 2"
      
      ...
    ]
  
  ...
]

【问题讨论】:

【参考方案1】:

好像没问题。可能只是一个错字。 尝试使用inversedBy="cw_employee_answers"(复数为$cw_employee_answers)而不是inversedBy="cw_employee_answer" 它应该可以工作。

【讨论】:

以上是关于Doctrine ORM ManyToOne Inverse 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine ORM ManyToOne Inverse 不起作用

使用 Doctrine ORM ManyToOne 关系在相反方向获取实体

Doctrine ManyToOne 关系 - 在“设置”时自动删除

Doctrine ORM Association映射两列

禁用 Doctrine 外键约束

使用 Doctrine ORM DQL (NOT IN) 排除行