symfony2 응용 프로그램에 WebSite
속성이있는 Job
엔티티가 있습니다.symfony/Doctrine : 지속 가능한 경우 클래스 <type>의 객체를 문자열로 변환 할 수 없습니다.
다른 속성이나 방법없이 본의 단순화 된 표현 :
/**
* @ORM\Entity
* @ORM\Table(name="Job")
*/
class Job
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="integer", name="website_id", nullable=false)
* @ORM\ManyToOne(targetEntity="Example\ExampleBundle\Entity\WebSite")
*/
protected $website;
}
심포니/교리 오류의 결과로 지속 할 때 문자열로 website
속성을 전송하려고 :
Catchable Fatal Error: Object of class Example\ExampleBundle\Entity\WebSite could not be converted to string in /vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php line 131
I 위의 @ORM \ Column 주석은 website
속성이 정수임을 나타냅니다. Symfony/Doctrine이 website
속성을 문자열로 변환하려고 시도하는 이유를 이해할 수 없습니다.
비 이상적인 해결 방법은 내가이 문제 해결을 시도 시도 :
이
__toString()
방법WebSite
에 추가하기id
재산의 문자열 표현을 반환을, 궁극적으로 끝날 수있는 올바른 값을 발생Job.website_id
데이터 필드; 나중에이 응용 프로그램의 다른 곳에 문자열을 표시하려면__toString()
이 필요하므로이 해결 방법은 실용적이지 않습니다.website
속성에서@ORM\Column
주석을 제거합니다. 이것은 미래의 모든 diff 생성 마이 그 레이션 (php app/console doctrine : migrations : diff)에서 관련 데이터베이스 필드의 'not null'부분을 제거합니다.
은 변경 내가 심포니/교리가 지속 할 때 필요한 것을 얻을 WebSite
의 getId()
메소드를 호출 알리기 위해 위의 주석에 존재해야 있습니까? 동일한 결과를 얻기 위해 WebSite
을 변경할 수 있습니까?
Doctrine이 궁극적으로 WebSite.getId()
을 호출하여 개체를 문자열로 캐스팅하지 않고 지속될 때 필요한 것을 얻을 수 있도록하기 위해 위의 주석을 그대로 유지하려면 어떤 변경이 필요합니까?
참고! – nepda