symfony2应用程序具有Job
实体,该实体具有WebSite
类型的属性。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;
}
的Symfony /学说试图持续导致错误时将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
我相信上面的@ORM \ Column注释表示website
属性是一个整数。我不明白为什么Symfony/Doctrine希望尝试将website
属性转换为字符串。
非理想的解决方法我试图试图解决这个问题:
添加
__toString()
方法WebSite
,返回id
属性的字符串表示形式,使正确的价值最终落得数据字段为Job.website_id
;这种解决方法是不切实际的,因为我将来需要__toString()
可用于在应用程序中的其他位置呈现字符串。从
website
属性中删除@ORM\Column
注释;这会导致所有将来的差异生成的迁移(php app/console doctrine:migrations:diff)删除相关数据库字段的'not null'方面。
是否有任何改变,我应该做出上述注释通知的Symfony /学说调用WebSite
的getId()
方法得到它所坚持的时候需要?我可以对WebSite
做出任何更改以实现相同效果吗?
需要进行哪些更改才能确保上述注释能够保持原样,从而使Doctrine最终可以在持续时调用WebSite.getId()
来获得所需内容而不是将对象转换为字符串?
请注意,你必须从你的注释取出完整@ORM \ Column属性! – nepda 2014-06-25 09:29:50