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

Php 从用户对象访问自然属性/方法,php,symfony,doctrine-orm,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

我有两个实体映射如下:

 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
属性/方法,例如树枝模板上的
User.Natural.some_属性
?我是否应该在
User
Natural
之间添加
OneToMany
关系,或者哪种方法正确

Test1

我将此添加到
Natural
类:

/**
 * @var \User
 *
 * @ORM\ManyToOne(targetEntity="\UserBundle\Entity\User", inversedBy="natural")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;
/**
 * @var \Natural
 *
 * @ORM\OneToMany(targetEntity="\UserBundle\Entity\Natural", mappedBy="user")
 */
protected $natural;
这是给Usuario类的:

/**
 * @var \User
 *
 * @ORM\ManyToOne(targetEntity="\UserBundle\Entity\User", inversedBy="natural")
 * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 */
protected $user;
/**
 * @var \Natural
 *
 * @ORM\OneToMany(targetEntity="\UserBundle\Entity\Natural", mappedBy="user")
 */
protected $natural;
然后,在我的模板中,我尝试以
user.getNatural.getName
身份访问,但出现以下错误:

无法访问空变量上的属性(“getName”) FOSUserBundle中的(“”):注册:第4行的email.txt.twig

我还尝试了另一个
user.getNatural[0].getName
,但出现了另一个错误:

无法访问中空变量(“”)上的键(“0”) FOSUserBundle:注册:第4行的email.txt.twig


我做错了什么?

你的问题有两个方面

  • 是的,您需要在用户上建立OneToMany关系,甚至可能与mappedBy/inversedBy建立关系

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

  • {%for User.getNatural().getValues()%}
    {#对自然实体做点什么}
    {%endfor%}
    

    User->natural
    默认情况下应为ArrayCollection对象。您必须在构造函数中分配它(
    $this->natural=new\doctor\Common\Collections\ArrayCollection();
    )。另外,您应该使用getNatural作为方法,而不是数组(这当然意味着您必须编写或生成getter)。您必须调用集合对象的
    getValues
    方法来获取要迭代的实际数组?如何访问当前最近创建的
    用户
    上的
    getName
    属性?也许您应该首先在代码中使用OneToMany关联。我不能用这样的评论来解释关于集合和关系的一切。