我有一个单向的ManyToMany关系:
class Account {
/* other attributes ... */
/**
* @ORM\ManyToMany(targetEntity="App\Entity\Item")
* @ORM\JoinTable("account_items",
* joinColumns={@ORM\JoinColumn(name="account_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="item_id", referencedColumnName="vnum")}
* )
*/
private $items;
}
我要做什么: 我想使该帐户具有一个或多个相同的项目(相同的标识符)成为可能。例如:
`account_id` 1, `item_id` 1
`account_id` 1, `item_id` 1
应该被允许。
当教义用两个主键(account_id,item_id)生成DDL查询时是不可能的,如果我尝试这样做,则会收到mysql duplciation输入错误。
我定制了将id
创建为主键(仅作为一个键)的迁移,但是我认为这不是适当的解决方案。
`id`: 1, account_id` 1, `item_id` 1
`id` : 2, account_id` 1, `item_id` 1
你有吗?
答案 0 :(得分:1)
在3个实体之间建立双向OneToMany <=> ManyToOne关系。
src / AppBundle / Entity / Account.php
class Account {
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\AccountItem", mappedBy="accounts")
*/
private $accountItems;
}
src / AppBundle / Entity / AccountItem.php
class AccountItem {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Account", inversedBy="accountItems")
*/
private $accounts;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Item", inversedBy="itemAccounts")
*/
private $items;
}
src / AppBundle / Entity / Item.php
class Item {
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\AccountItem", mappedBy="items")
*/
private $itemAccounts;
}
实际上这是一个ManyToMany关系,但是您现在可以添加id
,它将是唯一的,仍然有重复的条目。
现在来看,您在注释中引用了item.vnum
。知道当您不使用id
时Symfony会讨厌它。