Symfony 2条令2试图调用名为“的未定义方法”;getName";“类的”;条令\ORM\PersistentCollection“;

Symfony 2条令2试图调用名为“的未定义方法”;getName";“类的”;条令\ORM\PersistentCollection“;,symfony,doctrine,Symfony,Doctrine,我正在尝试获取相关对象,如文档symfony 2中所示。它向我显示了一个类似于本文标题的错误。我做错了什么 public function indexAction( ) { $UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User'); $all = $UserRepo->findOneBy(array('username'=>'macq')); $allOwner =

我正在尝试获取相关对象,如文档symfony 2中所示。它向我显示了一个类似于本文标题的错误。我做错了什么

public function indexAction( )       


{

$UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User');
 $all = $UserRepo->findOneBy(array('username'=>'macq'));
 $allOwner = $all->getOwner()->getName();

    return array(
    'allOwner'=>$allOwner,
     );
}
}


这是可以自我解释的

假设您希望每个用户都有多个所有者,则
user::$owner
类成员确实包含
所有者
对象的
集合。因此,您不能在该服务器上使用
getName()
。如果这确实是您的意图,那么您应该将类命名为memeber
$owners
——这将极大地帮助您区分集合和持久对象

我相信你应该有这样的东西:

class User{

    // ........

    /**
     * @ORM\OneToMany(targetEntity ="Property\ManagementBundle\Entity\Owner", mappedBy ="user")
     */
    protected $owners;

    // .........
}

class Owner {

    // ........

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

    // .........
}
然后是控制器的代码:

$UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User');
$all = $UserRepo->findOneBy(array('username'=>'macq'));
$owners = $all->getOwners();

if ( $owners){
    $allOwner = $all->getOwners()[0]->getName();
}
这有用吗


我仍然不相信你的逻辑没有颠倒。我的想法是,“
所有者
应该包含许多
用户
s”,而不是反过来……

这是可以自我解释的

假设您希望每个用户都有多个所有者,则
user::$owner
类成员确实包含
所有者
对象的
集合。因此,您不能在该服务器上使用
getName()
。如果这确实是您的意图,那么您应该将类命名为memeber
$owners
——这将极大地帮助您区分集合和持久对象

我相信你应该有这样的东西:

class User{

    // ........

    /**
     * @ORM\OneToMany(targetEntity ="Property\ManagementBundle\Entity\Owner", mappedBy ="user")
     */
    protected $owners;

    // .........
}

class Owner {

    // ........

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

    // .........
}
然后是控制器的代码:

$UserRepo = $this->getDoctrine()->getRepository('UserUserBundle:User');
$all = $UserRepo->findOneBy(array('username'=>'macq'));
$owners = $all->getOwners();

if ( $owners){
    $allOwner = $all->getOwners()[0]->getName();
}
这有用吗

我仍然不相信你的逻辑没有颠倒。我的想法是“
Owner
应该包含许多
User
s”,而不是相反