我有两个表:用户和联系人
用户数
- ID
- 用户名
联络人
- ID
- 用户身份
- 电子邮件(我简化了结构)
现在,如何正确设置学说实体?
/**
* @ORM\Entity
* @ORM\Table(name="users")
*/
class User extends BaseEntity {
/**
* @Id
* @GeneratedValue
* @Column(type="bigint")
*/
protected $id;
/**
* @ORM\Column(type="string", unique=true)
*/
protected $username;
/**
* @ORM\OneToOne(targetEntity="Contact")
* @ORM\JoinColumn(name="id", referencedColumnName="user_id", onDelete="CASCADE")
**/
protected $contact;
}
联系人实体:
/**
* @ORM\Entity
* @ORM\Table(name="contacts")
*/
class Contact extends BaseEntity {
/**
* @Id
* @GeneratedValue
* @Column(type="bigint")
*/
protected $id;
/**
* @var User
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
/**
* @ORM\Column(type="string")
*/
protected $email;
}
问题是我不确定实体关系是否设置正确。
User
删除然后删除,Contact
但不是这样。$user = new User()
,然后$contact = new Contact()
如何加入它们?$user->contact = $contact
?将它后persist()
和flush()
填充user_id
正确插入数据到这两个表?A new entity was found through the relationship '...\User#contact' that was not configured to cascade persist operations for entity: ...\Contact@0000000015f3aa5e000000012cd799f5. To solve this issue: Either explicitly call EntityManager#persist() on this unknown entity or configure cascade persist this association in the mapping for example @ManyToOne(..,cascade={"persist"}). If you cannot find out which entity causes the problem implement '...\Contact#__toString()' to get a clue.
我被卡在了我认为与我的问题#1有关的一个错误上,因此我无法测试#2。我已经浏览了几个小时的文档,但是却陷入困境,没有找到任何可以指导我的真实示例……有人可以通过向我展示这些实体之间的适当关系来帮助我吗?
为了级联用户删除,以便其联系人也被删除,请在Contact
实体中添加onDelete="CASCADE"
到属性的JoinColumn
注释中$user
(仅当删除其用户时,才删除联系人)
/**
* @var User
* @ORM\OneToOne(targetEntity="User")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE")
*/
private $user;
如果在将联系人添加到用户之前坚持联系,则不会出现任何错误。如果您想通过直接将新的非持久性联系人分配给用户来添加新联系人,则需要将其添加cascade={"persist", "remove"}
到您的User
实体中
/**
* @ORM\OneToOne(targetEntity="Contact",cascade={"persist", "remove"})
* @ORM\JoinColumn(name="id", referencedColumnName="user_id")
**/
protected $contact;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句