我有两个实体映射如下:
class Natural
{
/**
* @var User
*
* @ORMManyToOne(targetEntity="UserBundleEntityUser")
* @ORMJoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
...
}
class User extends BaseUser
{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue(strategy="SEQUENCE")
*/
protected $id;
...
}
需要对User
类进行哪些更改,以便访问Natural
属性/方法,例如在Twig模板上的user.natural.some_property
?我应该在User
和Natural
之间添加OneToMany
关系吗?或者哪一种方法是正确的?
我把这个添加到Natural
类:
/**
* @var User
*
* @ORMManyToOne(targetEntity="UserBundleEntityUser", inversedBy="natural")
* @ORMJoinColumn(name="user_id", referencedColumnName="id")
*/
protected $user;
这是Usuario
类:
/**
* @var Natural
*
* @ORMOneToMany(targetEntity="UserBundleEntityNatural", mappedBy="user")
*/
protected $natural;
然后在我的模板中,我尝试访问user.getNatural.getName
,但我得到这个错误:
不可能访问NULL变量上的属性("getName")(")在FOSUserBundle:注册:email.txt。第4行
我也尝试了这个其他user.getNatural[0].getName
,但得到这个其他错误:
不可能访问NULL变量(")上的键("0")FOSUserBundle:登记:email.txt。第4行
我做错了什么?
你的问题是双重的。
-
是的,你需要一个OneToMany关系的用户,甚至可能与mapappedby/inversedBy双向关联。
-
你可以传递一个实体作为模板变量,并使用它的方法作为分支函数/方法。因此,你应该能够在你的模板中做这样的事情:
{% for Natural in User.getNatural().getValues() %}
{# do something with the Natural entity #}
{% endfor %}