主义/外键关系在学说中

时间:2011-10-27 16:10:03

标签: php doctrine doctrine-orm

在我的mysql数据库中,我有两个表:“User”和“UserProfile”。表“UserProfile”有一个名为“user_id”的外键列,它链接到“User”表的“id”列。现在,当我使用doctrine从我的db表生成所有实体类时,创建的“UserProfile”类包含一个名为“user”的属性(属于“User”类型),并且不包含任何名为“user_id”的属性。 没关系

现在,如果我想找到一个用户的个人资料,给定user_id,我需要写这样的东西:

$user_profile_repo = $this->em->getRepository("UserProfile");

$user_profile = $user_profile_repo->findOneBy(array("user_id"=>$id));

但由于生成的实体类不包含“user_id”属性,因此上述代码不起作用。现在我需要知道如何进行调整以使上述代码正常工作?谢谢。

1 个答案:

答案 0 :(得分:1)

数据库中表/列的实际名称并不重要。你可以在评论中设置它们。

它应该是这样的:

/**
 * models\User
 * @Table(name="User")
 * @Entity
 */
class User
{
    /**
     * @Column(name="id", type="integer", precision=0, scale=0, nullable=false, unique=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @Column(name="name", type="string", length=50, precision=0, scale=0, nullable=false, unique=false)
     */
    private $name;

    /**
     * @OneToOne(targetEntity="models\UserProfile", mappedBy="user")
     */
    private $profile;
}


/**
 * models\UserProfile
 * @Table(name="UserProfile")
 * @Entity
 */
class UserProfile
{
    /**
     * @OneToOne(targetEntity="models\User", inversedBy("profile"))
     * @JoinColumn(name="user_id", referencedColumnName="id")
     */
    private $user;
}

在这种情况下,用户具有列id,而userprofile具有user_id

一旦生成,你应该在User中获取方法getProfile(),在UserProfile中你应该得到getUser()

它类似于5.7 oneToOne双向:http://www.doctrine-project.org/docs/orm/2.0/en/reference/association-mapping.html