尝试使用Symfony/Doctrine将Office对象保存到数据库时出现异常,如下所示:
An exception occurred while executing 'UPDATE offices SET county_postcode = ? WHERE id = ?' with params [{}, 1]:
SQLSTATE[HY000]: General error: 1366 Incorrect integer value: 'Co. Longford' for column 'county_postcode' at row 1
我的办公室类包含到县类的映射,如下所示:
/**
* @ORMEntity
* @ORMTable(name="offices")
*/
class Office
{
/**
* @ORMColumn(type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @param mixed $id
/**
* @ORMColumn(type="integer", length=11 )
* @ORMManyToOne(targetEntity="AppBundleEntityCounty")
*/
private $countyPostcode;
我的办公室类型使用实体类型
class OfficeType extends AbstractType
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('officeName')->add('addressLine1')->add('addressLine2')- >add('addressLine3')
->add('eirCode')->add('landlineTelephone')->add('mobileTelephone')->add('isActive')
->add('countyPostcode', EntityType::class, array(
// query choices from this entity
'class' => 'AppBundle:County',
'choice_label' => function ($county) {
return $county->getCountyName();
}));
}
这工作正常,并将县名称呈现为窗体上的选择控件中的字符串。在我的浏览器中检查表单数据显示表单包含正确的整数值,就像使用 var_dump($office) 检查对象一样,但根据问题开头的错误,它抛出
SQLSTATE[HY000]:一般错误:1366 不正确的整数值:"Co. Kilkenny"表示第 1 行的列"county_postcode
"['Co. Kilkenny' 是字符串值,而不是相关的整数类型]
我已经尝试了此处提到的解决方案,并将 __toString() 方法添加到我的 County 类中,但这并没有解决问题
public function __toString() {
return $this->countyName; }
有人有什么建议吗?
谢谢
John
编辑- 最终想通了,部分归功于马尔科姆的评论
显然你不能同时拥有两者
@ORMColumn
and
@ORMJoinColumn
在同一字段上一起批注,因此批注需要成为
/**
* @ORMManyToOne(targetEntity="County")
* @ORMJoinColumn(name="county_postcode", referencedColumnName="id")
*/
"办公室"和"县"之间的关联映射定义错误,请参阅 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-one-unidirectional。
* @ORMColumn(type="integer", length=11 )
删除此行并更新架构。
如上面的编辑中所述,删除 @ORM\Column 注释是不够的,这只会破坏视图。
问题是你不能同时拥有两者 @ORM\列 和
@ORM\连接列
在同一字段上一起添加批注
所以正确的注释需要成为
/**
* @ORMManyToOne(targetEntity="County")
* @ORMJoinColumn(name="county_postcode", referencedColumnName="id")
*/
另一个同样重要的步骤是确保引用的实体(在本例中为 County)定义一个 _toString() 方法,该方法返回引用实体的字符串名称
public function __toString() {
return $this->countyName; }
感谢马尔科姆和雷南帮助解决这个问题