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