您需要使用
JoinColumns
允许定义
JoinColumn
用于处理此类情况的注释
ManyToOne
或
OneToOne
关联。
与以下实体:
AppBundle\Entity\A.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class A
{
/**
* @ORM\Id
* @ORM\Column(name="key1", type="integer", nullable=false)
*/
private $key1;
/**
* @ORM\Id
* @ORM\Column(name="key2", type="integer", nullable=false)
*/
private $key2;
/**
* @ORM\OneToOne(targetEntity="AppBundle\Entity\B", mappedBy="a")
* @ORM\JoinColumns(
* @ORM\JoinColumn(name="key1", referencedColumnName="key1"),
* @ORM\JoinColumn(name="key2", referencedColumnName="key2"),
* )
*/
private $b;
}
AppBundle\Entity\B.php
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class B
{
/**
* @ORM\Id
* @ORM\Column(name="key1", type="integer", nullable=false)
*/
private $key1;
/**
* @ORM\Id
* @ORM\Column(name="key2", type="integer", nullable=false)
*/
private $key2;
/**
* @ORM\OneToOne(targetEntity="AppBundle\Entity\A", inversedBy="b")
* @ORM\JoinColumns(
* @ORM\JoinColumn(name="key1", referencedColumnName="key1"),
* @ORM\JoinColumn(name="key2", referencedColumnName="key2"),
* )
*/
private $a;
}
我可以达到期望的行为。当要求更新模式时,条令输出:
CREATE TABLE a (key1 INT NOT NULL, key2 INT NOT NULL, UNIQUE INDEX b_uniq (key1, key2), PRIMARY KEY(key1, key2)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
CREATE TABLE b (key1 INT NOT NULL, key2 INT NOT NULL, UNIQUE INDEX a_uniq (key1, key2), PRIMARY KEY(key1, key2)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB;
ALTER TABLE a ADD CONSTRAINT FK_E8B7BE432C5C6450B55535EA FOREIGN KEY (key1, key2) REFERENCES b (key1, key2);
ALTER TABLE b ADD CONSTRAINT FK_71BEEFF92C5C6450B55535EA FOREIGN KEY (key1, key2) REFERENCES a (key1, key2);