在我的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”属性,因此上述代码不起作用。现在我需要知道如何进行调整以使上述代码正常工作?谢谢。
答案 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