2016-01-03 2 views
0

Я пытаюсь выполнить связанные объекты, связанные с выборкой, как показано в документации symfony 2. Это показывает мне ошибку, как заголовок эта почта. что я делаю неправильно?Symfony 2 Doctrine 2 Попытка вызвать неопределенный метод с именем «getName» класса «Doctrine ORM PersistentCollection»

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; 

ответ

3

Это довольно самостоятельной объяснима.

Предполагая, что вы хотите, чтобы у каждого пользователя было много владельцев, вы, член класса User::$owner, содержит Collection из 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», а не наоборот ...

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