Ошибка преобразования Doctrine2 - PullRequest
32 голосов
/ 11 января 2012

Что означает эта ошибка из «Doctrine2 & Symfony2»?

Не удалось преобразовать значение базы данных "" в массив типа доктрины

Ответы [ 4 ]

72 голосов
/ 11 января 2012

Вы, вероятно, изменили поле с типа строка на массив типа в вашей сущности, но у вас уже есть данные базы данных. Не удается преобразовать пустую строку из базы данных в массив.

Если это база данных разработки, просто удалите ее и создайте заново или просто удалите поврежденные строки. Или вы можете преобразовать все пустые строки в a:0:{} (сериализованный пустой массив).

UPDATE table SET column="a:0:{}" WHERE column = "";
8 голосов
/ 01 октября 2014

Я бы предпочел, чтобы не все работали с SQL в своей производственной базе данных.

 @ORM\Column(type="array", nullable=TRUE)

Более простое решение - сделать столбец обнуляемым, поэтому после запуска вашей «консоли доктрины: схема: обновление --force» существующие записи БД получат значение NULL вместо пустой строки. И doctrine может обрабатывать преобразование значения базы данных NULL в массив типа Doctrine. Это должна быть просто ссылка на массив NULL. И PHP empty () не заботится, является ли его массив нулевого размера или NULL.

В MySQL я получаю следующий sql-дамп:

ALTER TABLE my_table ADD my_new_column LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)'
0 голосов
/ 22 марта 2019

Вы можете добавить новый тип так:

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);
    }

0 голосов
/ 14 мая 2012

тип столбца вашей таблицы в БД (например, longtext) не может соответствовать типу столбца Doctrine. изменить тип столбца.

...