私はドクトリンのその行動についてはわかりませんが、そうであれば、ほとんどいつもやっていることをすることができます。 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アノテーションでそれを行う方法であると思われますが、このアプローチとの違いはありません。
ご希望の場合はこちらをご覧ください。
重複していますか? :http://stackoverflow.com/questions/24120435/doctrine-manytomany-on-same-entity-duplicate-entry-error –
@BenHillierは全く同じものであっても、重複ではありません。問題は、私が望むだけ多くの複製を許可したいから、まったく同じブロックを同じページにX回追加することができるということです。 – Lucio