2013-06-11 2 views
0

이것은 이상합니다. 다른 관련 엔터티의 ArrayCollection을 포함 할 수있는 엔터티가 있습니다. 단일 엔티티의 값을 추가/검색 할 수 있도록 몇 가지 도우미 메서드를 만들면 메서드가 정의되지 않았다는 Symfony2 예외가 발생합니다. 네임 스페이스를 포함하므로 문제가 무엇인지 알 수 없습니다. 이처럼 보이는,Symfony2 - Doctrine ArrayCollection 메서드가 정의되지 않은 상태로 되돌려졌습니다

FatalErrorException: Error: Call to undefined method Acme\MyBundle\Entity\Thing::current() in /home/kevin/www/project/vendor/acme/my-bundle/Acme/MyBundle/Entity/MyEntity.php line 106

오류에 의해 판단 : 정말로 이상한 것은이 current()에서 예외를 던지는하지만 add() 점이다

namespace Acme\MyBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 

// ... 

public function setThing($thing) 
{ 
    $this->things->add($thing); 
} 

public function getThing() 
{ 
    return $this->things->current(); 
} 

: 코드 아래 (이름 때문에 NDA에 약간 변경) things을 ArrayCollection으로 취급하지 않습니다. things을 ArrayCollection으로 강제 설정할 수 있습니까? 나는 다음과 같은 것을 이미 가지고있다 :

/** 
* @var ArrayCollection things 
* 
* @ORM\OneToMany(targetEntity="Thing", mappedBy="other") 
*/ 
private $things; 

그러나 나는 무엇을 해야할지 잘 모르겠다.

+0

당신이 당신의'Thing' 클래스의 메소드'add'이 있습니까 대신 ArrayCollectionnull있어? – bpoiss

+0

'getThing()'을 호출하기 전에 객체를'var_dump()'할 수 있습니까? – cheesemacfly

+0

아니요. 다시 말하지만, '물건들'이 그 시점에서 컬렉션이되어야한다고 '잊어 버린'것처럼 보입니다. –

답변

0

이상한 기본 유형을 확인하여 해결할 수있었습니다.

public function getThing() 
{ 
    if (get_type($this->things) === 'ArrayCollection') { 
     return $this->things->current(); 
    } else { 
     return $this->things; 
    } 
} 

양식이 이제 예외없이 올바르게 표시됩니다.

둘 이상의 관련 엔터티가있는 경우 ArrayCollection을 게으르게 할당하고 하나만있는 경우 관련 엔터티로 남겨 둘 수 있을까요? : 어깨를 으쓱 :

+0

@ I3I0이 맞습니다. ArrayCollection 뒤에 괄호가 누락 될 수 있습니다. 이렇게 : $ this-> things = new ArrayCollection(); – Dung

0

당신은 당신의 엔티티 생성자에있는 ArrayCollection를 초기화해야합니다

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

그렇지 않으면 새로운 엔티티

+0

나는 그 이후로 다른 사람보다 대답에 그렇게했습니다. 그렇게 한 후에도 문제는 남아있었습니다. –

관련 문제