2017-08-04 23 views
1

多対多の関係で2つのエンティティが関連付けられている場合と同様に、スムーズな管理インターフェイスを取得しようとしています。ランクのような追加情報を定義するには、結合表が必要です。私は、バックエンドにジョイント可能なエンティティを表示したくないので、少なくとも1つのエンティティの編集メニューに書き込むことができます。私の例:EasyAdminBundleでJoinテーブルを持つ多対多

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
  1. まず、これら3つのエンティティすべての管理クラスサービスを作成する必要があります。したがって、あなたは次の3つのクラスがあります:あなたは管理者のサービスがOptions2QuestionsAdminをリストあなたから削除したい場合)OptionAdmin

    C)Options2QuestionsAdmin

  2. A)QuestionAdmin

    Bを - あなたがすることができますあなたのQuestionAdmで

    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. :services.ymlへshow_in_dashboard: falseの行を追加します。 formmapper方法でクラスでは、これを追加することができます。

    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, 
            ]) 
           ; 
          } 
    
+0

は、あなたがこのeasyadminbundleで動作しますか? – Jeff

+0

はい、ヘッダーにEasyAdminが表示されませんでした。しかし、アイデアは同じでなければなりません。 – staskrak

関連する問題