“Doctrine2& Symfony2”中的错误是什么意思?
无法将数据库值“”转换为Doctrine Type数组
答案 0 :(得分:72)
您可能已将类型字符串中的字段更改为实体中的类型数组,但已将数据存储在数据库中。尝试将空字符串从数据库转换为数组失败了。
如果它是开发数据库,只需将其删除并再次创建,或者只删除有问题的行。或者您可以将所有空字符串转换为a:0:{}
(序列化的空数组)。
UPDATE table SET column="a:0:{}" WHERE column = "";
答案 1 :(得分:8)
我不希望每个人都在他们的生产数据库上运行SQL。
@ORM\Column(type="array", nullable=TRUE)
使列可以为空的更简单的解决方案,因此在运行“console doctrine:schema:update --force”之后,现有的DB条目将获得NULL值,而不是空字符串。并且doctrine可以处理将数据库值NULL转换为Doctrine Type数组。它应该只是一个NULL数组引用。 PHP empty()并不关心它的零大小数组还是NULL。
在MySQL中,我得到以下sql-dump:
ALTER TABLE my_table ADD my_new_column LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)'
答案 2 :(得分:0)
您可以这样添加新的类型:
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\ArrayType;
class HandicappedArrayType extends ArrayType
{
public function convertToPHPValue($value, AbstractPlatform $platform)
{
if ($value === null || $value === '') {
return null;
}
return parent::convertToPHPValue($value, $platform);
}
答案 3 :(得分:-3)
你的db表列类型(例如:longtext)与Doctrine的列类型不匹配。 更改列类型。