【问题标题】:Inversed foreign key doctrine反向外键学说
【发布时间】: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


【解决方案1】:

您的映射配置错误。

在你的用户类中,它应该是:

/**
 * @ORM\OneToOne(targetEntity="Foo\Bar\Entity\UserMeta", cascade={"persist"}, inversedBy="user")
 * @ORM\JoinColumn(nullable=true)
 */
private $proData;

在你的 UserMeta 类中,它应该是:

/**
 * @ORM\OneToOne(targetEntity="Foo\Bar\Entity\User", mappedBy="proData")
 * @ORM\JoinColumn(nullable=true)
 */
private $user;

您也不需要 @ORM\Column 指令,因为 Doctrine2 会自动为您完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 1970-01-01
    • 2019-12-01
    • 2013-12-25
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多