2012-01-11 16 views

risposta

69

Probabilmente cambiato un campo da tipo stringa al tipo di matrice nella vostra entità, ma già i dati nel database. Sta fallendo nel tentativo di convertire una stringa vuota dal database in un array.

Se si tratta di un database di sviluppo, è sufficiente eliminarlo e crearlo di nuovo, o semplicemente eliminare le righe offensive. Oppure puoi convertire tutte le stringhe vuote in a:0:{} (una matrice vuota serializzata).

UPDATE table SET column="a:0:{}" WHERE column = ""; 
+2

avuto questo stesso problema. Si è verificato dopo aver aggiunto un campo a un'entità con dati preesistenti. Doctrine prova a convertire NULL in un array, invece di vedere intelligentemente che il campo è NULL, quindi dovrebbe semplicemente restituire un array vuoto;) Impostare le voci preesistenti su un array vuoto serializzato ha funzionato perfettamente. +1 – Nick

+1

Grazie per la soluzione @solarc - Avevo bisogno della clausola UPDATE per il mio campo 'roles' che era vuoto dopo aver importato utenti da un progetto esistente: http://blog.webdevilopers.net/fosuserbundle-login-error-could- not-convert-database-value-to-doctrine-type-array/ – webDEVILopers

+1

OPPURE puoi impostare il campo a null con 'N;' – Broncha

-3

il tipo di colonna delle tabelle DB (ad esempio: longtext) non può corrispondere al tipo di colonna di Doctrine. cambia tipo di colonna.

8

Preferirei non avere tutti gli utenti che eseguono SQL nel proprio database di produzione.

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

una soluzione più facile nel make il nullable Colonna, così dopo si esegue il "console dottrina: schema: update --force" le voci DB esistenti avranno un valore NULL, invece di una stringa vuota. E la doctrine può gestire una conversione del valore del database NULL nell'array Doctrine Type. Dovrebbe essere solo un riferimento di array NULL. E PHP empty() non interessa se il suo array di dimensioni zero o NULL.

In MySQL, ottengo il seguente sql-dump:

ALTER TABLE my_table ADD my_new_column LONGTEXT DEFAULT NULL COMMENT '(DC2Type:array)' 
+0

sebbene io abbia lo stesso sql-dump, questo non ha funzionato per me visto che sto ottenendo lo stesso errore. – apfz

+0

Un buon consiglio! Purtroppo, avevo già provato la soluzione di cui sopra, e sono rimasto bloccato con molti campi con stringa vuota anziché NULL. Ho risolto il problema eseguendo questa istruzione: dottrina app/console: query: sql "UPDATE << your_table_name >> SET <> = NULL WHERE <> = ''" – qualbeen

Problemi correlati