从用户对象访问自然属性/方法


Access Natural properties/method from User object

我有两个实体映射如下:

 class Natural
{
    /**
     * @var 'User
     *
     * @ORM'ManyToOne(targetEntity="'UserBundle'Entity'User")
     * @ORM'JoinColumn(name="user_id", referencedColumnName="id")
     */
    protected $user;
    ...
}
class User extends BaseUser
{
    /**
     * @ORM'Id
     * @ORM'Column(type="integer")
     * @ORM'GeneratedValue(strategy="SEQUENCE")
     */
    protected $id;
    ...
}

需要对User类进行哪些更改,以便访问Natural属性/方法,例如在Twig模板上的user.natural.some_property ?我应该在UserNatural之间添加OneToMany关系吗?或者哪一种方法是正确的?

Test1

我把这个添加到Natural类:

/**
 * @var 'User
 *
 * @ORM'ManyToOne(targetEntity="'UserBundle'Entity'User", inversedBy="natural")
 * @ORM'JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;

这是Usuario类:

/**
 * @var 'Natural
 *
 * @ORM'OneToMany(targetEntity="'UserBundle'Entity'Natural", mappedBy="user")
 */
protected $natural;

然后在我的模板中,我尝试访问user.getNatural.getName,但我得到这个错误:

不可能访问NULL变量上的属性("getName")(")在FOSUserBundle:注册:email.txt。第4行

我也尝试了这个其他user.getNatural[0].getName,但得到这个其他错误:

不可能访问NULL变量(")上的键("0")FOSUserBundle:登记:email.txt。第4行

我做错了什么?

你的问题是双重的。

  1. 是的,你需要一个OneToMany关系的用户,甚至可能与mapappedby/inversedBy双向关联。

  2. 你可以传递一个实体作为模板变量,并使用它的方法作为分支函数/方法。因此,你应该能够在你的模板中做这样的事情:

{% for Natural in User.getNatural().getValues() %} {# do something with the Natural entity #} {% endfor %}