【发布时间】:2014-07-03 09:47:53
【问题描述】:
我的实体 User 和 UserMeta 之间存在 OneToOne 关系
我想在 User 中访问 UserMeta,但在我的 mysql 数据库的 UserMeta 表中设置外键:
class User implements UserInterface{
/**
* @ORM\Column(type="integer", unique=true)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\UserMeta", cascade={"persist"}, inversedBy="id_user")
* @ORM\JoinColumn(nullable=true)
* @ORM\Column(name="id_pro")
*/
private $proData;
}
class UserMeta{
/**
* @ORM\Column(type="integer", unique=true)
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\OneToOne(targetEntity="Foo\Bar\Entity\User", mappedBy="id_pro")
* @ORM\JoinColumn(nullable=true)
* @ORM\Column(name="id_user")
*/
private $user;
}
无论如何用教义来做到这一点?我想我误解了映射和反转的属性。
【问题讨论】:
-
嗨@MarcD,几个月前我写了一篇关于一对一映射的帖子。它也告诉你属性的反转。如果你有兴趣这里是链接。 anjanasilva.com/blog/…
-
我看了你的教程,但你的程序表中还有 program_details_id 没有?
-
product_details_id 是当前表的 (product) 列名,您引用到目标表的 (product_details) 主键。或者在最佳情况下,您可以将当前表的主键映射到目标表的主键。
-
所以如果产品表中没有外键,我的产品对象中就不能有 productDetails(在 php 中)?我只想在 program_details 表中有程序 ID,但我没有不关心双向关系。
-
如果你提到了 mappedBy 或 inversedBy 它期望目标实体的映射或反转。假设您正在从表 A 到表 B。要形成基本关系,您在实体 A 中提到 oneToOne / oneToMany / 等。但是如果您在实体 A 中提到 inversedBy 或 mappedBy,则需要匹配 mappedBy(如果反转)或实体 B 中的 inversedBy(如果已映射)属性。希望您明白这一点。干杯!
标签: php mysql symfony orm doctrine