web-dev-qa-db-fra.com

Erreur de conversion doctrine2

Que signifie cette erreur de "doctrine2 & symfony2"?

Impossible de convertir la valeur de la base de données "" sur Doctrine Tableau de type

33
Nizar B.

Vous avez probablement changé un champ de type chaîne pour taper la matrice dans votre entité mais avez déjà des données la base de données. Il ne faut pas essayer de convertir une chaîne vide de la base de données en une matrice.

Si c'est une base de données de développement, supprimez-la et créez-la à nouveau, ou supprimez simplement les lignes incriminées. Ou vous pouvez convertir toutes les chaînes vides en a:0:{} (une matrice vide sérialisée).

UPDATE table SET column="a:0:{}" WHERE column = "";
73
solarc

Je préférerais ne pas avoir tout le monde exécutant SQL sur sa base de données de production.

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

Une solution plus facile dans la nullable de la colonne, de sorte qu'une fois que vous avez exécuté votre "Console Doctrine: Schema: Mettre à jour --force" Les entrées de DB existantes obtiendront une valeur null, au lieu d'une chaîne vide. Et doctrine peut gérer une conversion de la valeur de la base de données NULL en Doctrine Tableau de type. Il ne devrait s'agir d'une référence de tableau nulle. Et PHP vide () ne se soucie pas de son tableau de taille zéro ou de son null.

Dans MySQL, je reçois le SQL-Dump suivant:

ALTER TABLE my_table ADD my_new_column LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)'
8
William Choy

Vous pouvez ajouter un nouveau type comme celui-ci:

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
Jan Galtowski