Doctrine2转换错误

时间:2012-01-11 11:22:27

标签: symfony doctrine-orm

“Doctrine2& Symfony2”中的错误是什么意思?

  

无法将数据库值“”转换为Doctrine Type数组

4 个答案:

答案 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的列类型不匹配。 更改列类型。