2016-08-03 14 views
2

私は現在、自分のアプリケーションのエンティティに持っていると:Symfony2の - 多対多重複行

  • ページ
  • ブロック
ページは、多くのページの間で共有されている多くのブロックを持つことができ

ので、関係がManyToManyであることは非常に明白です。しかし、同じページに同じブロックを2回(またはそれ以上)追加できるようにする必要があります。 Doctrineは自動的に "page_block"結合テーブルを作成しますが、page_idとblock_idの両方を主キーとして使用するため、重複を追加するとエラーが発生します。

追加のエンティティを追加せずに、Doctrineにページ - ブロック関係に重複を許可することは可能ですか?

+1

重複していますか? :http://stackoverflow.com/questions/24120435/doctrine-manytomany-on-same-entity-duplicate-entry-error –

+0

@BenHillierは全く同じものであっても、重複ではありません。問題は、私が望むだけ多くの複製を許可したいから、まったく同じブロックを同じページにX回追加することができるということです。 – Lucio

答えて

1

私はドクトリンのその行動についてはわかりませんが、そうであれば、ほとんどいつもやっていることをすることができます。 ManyToMany関係を2つのOneToMany-ManyToOneとして表します。独自のPageBlockエンティティを作成し、その外部キーを構成する必要があります。

class Page{ 
    /** 
    * @var array 
    * 
    * @ORM\OneToMany(targetEntity="PageBlock", mappedBy="page", cascade={"all"}) 
    */ 
    private $pageBlocks; 
} 

class Block{ 
     /** 
     * @var array 
     * 
     * @ORM\OneToMany(targetEntity="PageBlock", mappedBy="block", cascade={"all"}) 
     */ 
     private $pageBlocks; 
    } 

class PageBlock{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

    /** 
    * @var \stdClass 
    * 
    * @ORM\ManyToOne(targetEntity="Page", inversedBy="pageBlocks") 
    * @ORM\JoinColumn(name="id_page", referencedColumnName="id") 
    */ 
    private $page; 

    /** 
    * @var \stdClass 
    * 
    * @ORM\ManyToOne(targetEntity="Block", inversedBy="pageBlocks") 
    * @ORM\JoinColumn(name="id_block", referencedColumnName="id") 
    */ 
    private $block; 
    } 

プライマリキーはIDのままであるため、問題は解決されています。私はほとんどの場合、これは関係の中に余分な属性が必要な場合(ほとんどの場合、起こります)、これを行う方法であるためです。私はそれがManyToManyアノテーションでそれを行う方法であると思われますが、このアプローチとの違いはありません。

ご希望の場合はこちらをご覧ください。

関連する問題