2012-01-11 2 views
30

"Doctrine2 & Symfony2"의 오류는 무엇을 의미합니까? 교리 형 배열에 ""데이터베이스 값을 변환 할 수 없습니다Doctrine2 변환 오류

답변

69

당신은 아마 당신의 엔티티에 배열을 입력 문자열 형식에서 필드를 변경하지만 이미 데이터를 데이터베이스가 있습니다. 빈 문자열을 데이터베이스에서 배열로 변환하는 데 실패했습니다.

개발 데이터베이스 인 경우 해당 데이터베이스를 삭제하고 다시 만들거나 불쾌한 행을 삭제하기 만하면됩니다. 또는 모든 빈 문자열을 a:0:{} (일련 화 된 빈 배열)로 변환 할 수 있습니다.

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

: MySQL의에서

, 나는 다음과 같은 SQL 덤프를 얻을. 기존 데이터가있는 엔터티에 필드를 추가 한 후 발생합니다. Doctrine은 필드가 널 (NULL)인지 지능적으로 보는 대신 NULL을 배열로 변환하려고 시도하므로 빈 배열을 반환해야합니다;) 기존 항목을 직렬화 된 빈 배열로 설정하면 완벽하게 작동했습니다. +1 – Nick

+1

솔루션을 주셔서 감사합니다. @solarc - 기존 프로젝트에서 사용자를 가져온 후에 비어있는'roles' 필드에 대한 UPDATE 절이 필요했습니다 : http://blog.webdevilopers.net/fosuserbundle-login-error-could- doctrine-type-array/ – webDEVILopers

+1

또는 'N;'과 함께 필드를 설정할 수 있습니다. – Broncha

-3

db 테이블 열 유형 (예 : longtext)은 Doctrine의 열 유형과 일치 할 수 없습니다. 열 유형을 변경하십시오.

8

모든 사람이 프로덕션 데이터베이스에서 SQL을 실행하지 않는 것을 선호합니다.

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

메이크업에 더 쉬운 솔루션을 열 NULLABLE, 그래서 당신은 당신의 "콘솔 교리를 : 스키마 : 업데이 트를 --force"실행 한 후 기존 DB 항목 대신 빈 문자열, NULL 값을 얻을 것이다. 그리고 doctrine은 데이터베이스 값 NULL을 Doctrine Type 배열로 변환하는 것을 처리 할 수 ​​있습니다. 그것은 단지 NULL 배열 참조 여야합니다. PHP empty()는 크기가 0 인 배열이나 NULL이 상관 없습니다. 이 같은 문제가 있었다

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

동일한 sql-dump가 있지만이 작업은 저에게 효과적이지 않습니다. 같은 오류. – apfz

+0

멋진 팁! 슬프게도, 나는 aleady가 위의 솔루션을 시도했지만 NULL 대신 빈 문자열이있는 필드가 많이 붙어있었습니다. 다음 문을 실행하여 해당 문제를 해결했습니다. app/console doctrine : query : sql "UPDATE << your_table_name >> SET <> = NULL WHERE <> = ''" – qualbeen