EasyAdminBundle中加入表的多对多

时间:2017-08-04 22:01:15

标签: symfony doctrine symfony2-easyadmin

我试图获得一个流畅的管理界面,就像两个实体通过多对多关系相关联一样。我需要连接表来定义其他信息,如排名。我不想在后端显示连接表实体,它应该可以写在至少一个实体的编辑菜单中。我的例子:

class Question{
    /**
     * @Assert\NotBlank()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Options2Questions", mappedBy="question", cascade={"persist"})
     */
    private $optionQuestion;

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

    public function addOptionQuestion(\AppBundle\Entity\Options2Questions $optionQuestion){
        $this->optionQuestion[] = $optionQuestion;
        return $this;
    }

    public function removeOptionQuestion(\AppBundle\Entity\Options2Questions $optionQuestion){
        $this->optionQuestion->removeElement($optionQuestion);
    }

    public function getOptionQuestion(){
        return $this->optionQuestion;
    }
}

class Options{

    /**
     * @Assert\NotBlank()
     * @ORM\OneToMany(targetEntity="AppBundle\Entity\Options2Questions", mappedBy="options")
     */
    private $optionQuestion;

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

    public function addOptionQuestion(\AppBundle\Entity\Options2Questions $optionQuestion){
        $this->optionQuestion[] = $optionQuestion;
        return $this;
    }

    public function removeOptionQuestion(\AppBundle\Entity\Options2Questions $optionQuestion)
    {
        $this->optionQuestion->removeElement($optionQuestion);
    }

    public function getOptionQuestion(){
        return $this->optionQuestion;
    }
}

class Options2Questions
{    

    /**
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Options", inversedBy="optionsQuestions")
     * @ORM\JoinColumn(name="options_id", referencedColumnName="id", nullable=false)
     */
    private $options;

    /**
     * @ORM\Id()
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Question", inversedBy="optionsQuestions")
     * @ORM\JoinColumn(name="question_id", referencedColumnName="id", nullable=false)
     */
    private $question;

    /**
     * @var int
     *
     * @ORM\Column(name="rank", type="integer", nullable=true)
     */
    private $rank;



    /**
     * Set rank
     *
     * @param integer $rank
     *
     * @return Options2Questions
     */
    public function setRank($rank)
    {
        $this->rank = $rank;

        return $this;
    }

    /**
     * Get rank
     *
     * @return int
     */
    public function getRank()
    {
        return $this->rank;
    }

    /**
     * Set options
     *
     * @param \AppBundle\Entity\Options $options
     *
     * @return Options2Questions
     */
    public function setOptions(\AppBundle\Entity\Options $options)
    {
        $this->options = $options;

        return $this;
    }

    /**
     * Get options
     *
     * @return \AppBundle\Entity\Options
     */
    public function getOptions()
    {
        return $this->options;
    }

    /**
     * Set question
     *
     * @param \AppBundle\Entity\Question $question
     *
     * @return Options2Questions
     */
    public function setQuestion(\AppBundle\Entity\Question $question)
    {
        $this->question = $question;

        return $this;
    }

    /**
     * Get question
     *
     * @return \AppBundle\Entity\Question
     */
    public function getQuestion()
    {
        return $this->question;
    }
}

我找不到任何关于此的文档。我应该具体看哪儿?

1 个答案:

答案 0 :(得分:-1)

  1. 首先,您必须为所有这三个实体创建管理类 - 服务。因此,您将拥有接下来的3个班级:

    a)QuestionAdmin

    b)OptionAdmin

    c)Options2QuestionsAdmin

  2. 如果您想从管理服务列表中删除Options2QuestionsAdmin - 您可以将show_in_dashboard: false行添加到services.yml:

    app.admin.options2questions:
                class: AppBundle\Options2questionsAdmin
                arguments: [~, AppBundle\EntityOptions2questions, SonataAdminBundle:CRUD]
                tags:
                    - { name: sonata.admin, manager_type: orm, group: 'your_group',  label: 'your_label', show_in_dashboard: false }
    
  3. 在formmapper方法的QuestionAdmin类中,您可以添加:

    class QuestionAdmin extends AbstractAdmin
    {
        // ... 
    
             protected function configureFormFields(FormMapper $formMapper)
             {
                 $formMapper
                      ->add('optionQuestion', 'sonata_type_collection', [
                            'required'      => true,
                            'label'         => 'option_question',
                            'by_reference'  => false,
                            'btn_add'       => 'add_button',
                            'type_options'  => [
                                'delete' => true,
                            ],
                        ], [
                            'edit'          => 'inline',
                            'inline'        => 'standard',
                            'sortable'      => 'id',
                            'allow_delete'  => true,
                        ])
                  ;
              }