学说:一对一的关系(简单)

时间:2014-07-09 09:32:00

标签: php symfony doctrine-orm doctrine

简单的问题我有一个集合Users和Users_Preferences。用户首选项被假定为用户的扩展。例如:

Users
--------------------------------
Id | Name
1  | Test
2  | Luis
3  | Lopes

Users_Preferences
--------------------------------
Id | User_ID | Color | TrackSystem | ReceiveNewsletter
1  |    1    | Green |  after_seen |        no
2  |    3    | Red   | dont_track  |        yes

因为你可以看到我想创建一个关系但是在users_preferences上可能没有记录,因为我没有强迫人们选择他们的偏好既没有设置默认值。

我也希望从我的用户存储库和实体访问它。

# src/CrazyBundle/Controllers/WhateverController.php
/** @var UsersPreferences $userPreferences **/
$userPreferences = $this->getUser()->getPreferences();
$userPreferences->getColor()

// OR
$this->getUser()->getPreference("color")

对于使用Symfony的人来说,这应该是一个基本问题:)。请先做最好的练习。

由于

1 个答案:

答案 0 :(得分:2)

我认为,用户和用户属性都是诱人的。

对于User实体,您可以使用OneToOne关系来设置首选项属性:

/**
 * @ORM\OneToOne(targetEntity="UserPreferences")
 * @ORM\JoinColumn(name="preference_id", referencedColumnName="id", nullable=true)
 **/
protected $preference;

为它生成一个getter和一个setter。

在此之后,您可以从用户获取UserPreference实体:

$user->getPreference()->getColor()

或在TWIG:

{{ user.preference.color}}