在我的Symfony代码中,我使用了Doctrine。 在一个实体(AppBundle \ Entity \ Core \ User)中,我定义了列 foodTypes ,该列与另一个实体(AppBundle \ Entity \ FoodRecording \ FoodType)关联。 我已经定义了 User 和 FoodType 之间的多对多关系,并带有链接表 foodrecording_user ,并加入了 User.username 和 FoodType.foodtype_code 。 代码如下所示。
// Entity\Core\User
namespace AppBundle\Entity\Core;
......
class User implements AdvancedUserInterface, \Serializable {
......
/**
* @ORM\ManyToMany(targetEntity="AppBundle\Entity\FoodRecording\FoodType")
* @ORM\JoinTable(name="foodrecording_user",
* joinColumns={@ORM\JoinColumn(name="username", referencedColumnName="username", onDelete="CASCADE")},
* inverseJoinColumns={@ORM\JoinColumn(name="foodtype_code", referencedColumnName="code", onDelete="CASCADE")}
* )
*/
private $foodTypes;
正如预期的那样,我可以获取某个用户的foodTypes,并且一切似乎都很好,直到我偶尔发现...
每次我运行该应用程序时,例如,如果该表中的原始内容是,该程序会意外地在 foodrecording_user 表中添加新记录。
username foodtype_code
30001180 1020
30001180 1660
30001180 320
30001270 1660
30001270 580
然后,使用名为30001180的用户运行该应用程序后,内容将变为:
username foodtype_code
30001180 1020
30001180 1660
30001180 320
30001270 1660
30001270 580
112 1020
112 1660
112 320
此处112是用户(用户名30001180)的ID(主键)。 这意味着该程序似乎重复了用户的记录,只是用ID(112)替换了用户名(30001180)。
我确定我没有写任何代码来复制数据库中的记录-我只是读出了它们( Select ),而没有进行任何写操作,例如插入或更新。
谁能告诉我,为什么会这样?我很困惑!
非常感谢。