2016-01-20 50 views
1

致命错误:调用未定义方法学说\ ORM \ PersistentCollection ::的getPath()Symfony的2一对多

用户实体: user.php的

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 
use Symfony\Component\Security\Core\User\UserInterface; 
use Doctrine\Common\Collections\ArrayCollection; 

/** 
    * @ORM\Entity 
    * @ORM\Table(name="users") 
    */ 
class User implements UserInterface, \Serializable 
{ 

/** 
* @ORM\OneToMany(targetEntity="Avatars", mappedBy="user") 
*/ 
protected $avatars; 

/** 
* @return mixed 
*/ 
public function getAvatar() 
{ 
    return $this->avatars; 
} 


public function __construct() 
{ 
    $this->avatars = new ArrayCollection(); 
} 

/** 
* Get avatars 
* 
* @return \Doctrine\Common\Collections\Collection 
*/ 
public function getAvatars() 
{ 
    return $this->avatars; 
} 

和头像实体: Avatar.php

namespace AppBundle\Entity; 

    use Doctrine\ORM\Mapping as ORM; 
    use Symfony\Component\Validator\Constraints as Assert; 
    use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity; 

    /** 
     * @ORM\Entity 
     * @ORM\Table(name="avatars") 
     */ 
    class Avatars 
    { 
/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @ORM\ManyToOne(targetEntity="User", inversedBy="avatars") 
* @ORM\JoinColumn(name="user", referencedColumnName="id") 
*/ 
private $user; 


/** 
* @ORM\Column(type="string", length=54) 
*/ 
private $path; 

/** 
* @return mixed 
*/ 
public function getPath() 
{ 
    return $this->path; 
} 

无法从控制器到阿凡达实体:

HomeController.php

public function homeAction() 
    { 
     $usr= $this->get('security.token_storage')->getToken()->getUser(); 
     var_dump($user->getAvatar()->getPath());exit; 
    } 

我在哪里弄错了?我只开始学习symfony框架,也许我忘了添加任何东西?

回答

3

User实体包含一个Avatar对象的集合,而不仅仅是一个对象。你可以做什么,例如,是迭代的头像和每个单个对象这样的呼吁getPath()

foreach ($user->getAvatar() as $avatar) { 
    var_dump($avatar->getPath(); 
} 

顺便说一句,在User类代码的方法名称getAvatar()是误导,因为一次会期望用户只有一个头像而不是一组头像。我会将它重命名为getAvatars()

+0

你说的对,谢谢 – Asmoria