2016-01-20 5 views
1

Фатальная ошибка: Вызов неопределенной метод Доктрины \ ORM \ PersistentCollection :: GetPath()Symfony 2 OneToMany

объект пользователя: 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; 
} 

И Аватар Entity: 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; 
} 

не удается достичь Аватар Entity от контроллера:

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(); 
} 

Кстати, имя метода getAvatar() в коде в User класса вводит в заблуждение, как один воли ожидайте, что у пользователя будет ровно один аватар, а не коллекция аватаров. Я бы переименовал его в getAvatars().

+0

Вы правы, спасибо – Asmoria

Смежные вопросы