一个 symfony2 应用程序有一个Job实体,该实体具有 type 的属性WebSite。
没有其他属性或方法的简化表示:
/**
* @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/Doctrine 在持久化时尝试将website属性转换为字符串,从而导致错误:
可捕获的致命错误:无法将类 Example\ExampleBundle\Entity\WebSite 的对象转换为 /vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php 第 131 行中的字符串
我相信上面的 @ORM\Column 注释表示该website属性是一个整数。我不明白为什么 Symfony/Doctrine 希望尝试将website属性转换为字符串。
我尝试解决此问题的非理想解决方法:
向 中添加
__toString()方法WebSite,返回属性的字符串表示id,导致正确的值最终出现在Job.website_id数据字段中;这种解决方法是不切实际的,因为我将来需要__toString()在应用程序的其他地方显示字符串。从属性中删除
@ORM\Column注释;website这将导致所有未来由差异生成的迁移(php app/console dictionary:migrations:diff)删除相关数据库字段的“非空”方面。
我应该对上述注释进行任何更改以通知 Symfony/Doctrine 调用getId()方法WebSite以获取持久化时所需的内容吗?我可以做些什么改变WebSite来达到同样的效果吗?
需要进行哪些更改才能确保上述注释可以保留在原地,以便 DoctrineWebSite.getId()在持久化时最终调用以获取所需的内容,而不是尝试将对象强制转换为字符串?