代码之家  ›  专栏  ›  技术社区  ›  kockburn

对于多对多关系,反向边总是返回一个空集合

  •  0
  • kockburn  · 技术社区  · 6 年前

    这是我以前做过的,所以我很困惑为什么它不起作用。

    Question Qresponse . 问题 拥有 侧边和 Q响应 侧面。当我用条令来寻找所有问题时 qresponses属性 总是空的。

    //$questions is populated, but the qresponses property is always empty
    $questions = $this->getDoctrine()->getManager()->getRepository(Question::class)->findAll();
    

    为什么是空的?我做错什么了?

    /**
     * Class Question
     * @package Entity
     *
     * @ORM\Entity
     */
    class Question
    {
    
        public function __construct()
        {
            $this->qresponses = new ArrayCollection();
        }
    
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /** @var ArrayCollection $responses
         * @ORM\ManyToMany(targetEntity="Qresponse", mappedBy="questions", cascade={"persist"})
         */
        private $qresponses;
    }
    

    反向端片段:Qresponse

    /**
     * Class Response
     * @package Entity
     *
     * @ORM\Entity
     */
    class Qresponse
    {
    
        public function __construct()
        {
            $this->questions = new ArrayCollection();
        }
    
        /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        private $id;
    
        /**
         * @var ArrayCollection $question
         * @ORM\ManyToMany(targetEntity="Question", inversedBy="qresponses", cascade={"persist"})
         * @ORM\JoinTable(name="qresponse_question")
         */
        private $questions;
    
    }
    

    已填充的数据库的映像。

    image of database that is populated

    来自symfony的分析器的图像显示qresponses是空的。。。

    image from profiler in symfony showing that qresponses is empty

    1 回复  |  直到 6 年前
        1
  •  3
  •   iiirxs    6 年前

    你没做错什么,这只是个典型的问题。

    默认情况下,条令使用延迟加载,这意味着关联只在需要时加载(例如 $question->getQResponses()->first()->getId() 称为)。你可以很容易地改变它设置原则 fetch 选择加入您的协会:

    /** 
     * @var ArrayCollection $responses
     * @ORM\ManyToMany(targetEntity="Qresponse", mappedBy="questions", cascade={"persist"}, fetch="EAGER")
     */
    private $qresponses;