Symfony实体类型引用在保存时包含字符串而不是整数



尝试使用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;    }

感谢马尔科姆和雷南帮助解决这个问题

相关内容

  • 没有找到相关文章

最新更新