当前位置:  开发笔记 > 编程语言 > 正文

Symfony 2 Doctrine 2尝试调用类"Doctrine\ORM\PersistentCollection"的名为"getName"的未定义方法

如何解决《Symfony2Doctrine2尝试调用类"Doctrine\ORM\PersistentCollection"的名为"getName"的未定义方法》经验,为你挑选了1个好方法。

我正在尝试执行一个获取关联对象,如文档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,
     );
}

}

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


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

Jovan Perovi.. 5

这是相当自我解释的.

假设你要为每一个用户有很多车主,你User::$owner的类成员不包含CollectionOwner对象.因此,你不能用户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应该包含很多Users",而不是相反...



1> Jovan Perovi..:

这是相当自我解释的.

假设你要为每一个用户有很多车主,你User::$owner的类成员不包含CollectionOwner对象.因此,你不能用户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应该包含很多Users",而不是相反...

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有