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

时间:2014-08-22 21:13:26

标签: php symfony doctrine-orm

我有两个实体映射如下:

 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?我应该在OneToManyUser之间添加Natural关系,或者哪种方式可以获得此关系?

测试1

我将此添加到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.twig第4行

我还尝试了另外一个user.getNatural[0].getName,但是得到了另一个错误:

  

无法在NULL变量("")上访问密钥(" 0")   FOSUserBundle:注册:第4行的email.txt.twig

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你的问题是双重的。

  1. 是的,你需要一个关于用户的OneToMany关系,甚至可能是带有mappedBy / inversedBy的bidirectional association

  2. 您可以将实体作为模板变量传递,并将其用作树枝函数/方法。因此,您应该可以在模板中执行以下操作:

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