2012-01-11 29 views

Trả lời

69

Bạn có thể thay đổi một lĩnh vực từ kiểu chuỗi để gõ mảng trong tổ chức của bạn, nhưng đã có dữ liệu cơ sở dữ liệu. Nó không thành công khi cố chuyển đổi một chuỗi rỗng từ cơ sở dữ liệu sang một mảng.

Nếu đó là cơ sở dữ liệu phát triển, chỉ cần xóa nó và tạo lại hoặc chỉ xóa các hàng vi phạm. Hoặc bạn có thể chuyển đổi tất cả các chuỗi rỗng thành a:0:{} (một mảng trống được tuần tự hóa).

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

Đã vấn đề này giống nhau. Xảy ra sau khi tôi thêm một trường vào một thực thể có dữ liệu từ trước. Doctrine cố gắng chuyển đổi NULL thành một mảng, thay vì nhìn thấy một cách thông minh rằng trường là NULL vì vậy nó sẽ đơn giản trả về một mảng trống;) Thiết lập các mục từ trước cho một mảng trống tuần tự đã làm việc hoàn hảo. +1 – Nick

+1

Cảm ơn vì giải pháp @solarc - Tôi cần mệnh đề UPDATE cho trường 'vai trò' của mình sau khi nhập người dùng từ dự án hiện tại: http://blog.webdevilopers.net/fosuserbundle-login-error-could- không chuyển đổi-database-value-to-doctrine-type-array/ – webDEVILopers

+1

HOẶC bạn có thể đặt trường thành null bằng 'N;' – Broncha

-3

loại cột bảng db của bạn (ví dụ: longtext) không thể khớp với loại cột của Doctrine. thay đổi loại cột.

8

Tôi không muốn mọi người chạy SQL trên Cơ sở dữ liệu sản xuất của họ.

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

Một giải pháp dễ dàng hơn trong làm cho cột nullable, vì vậy sau khi bạn chạy "console doctrine: schema: cập nhật --force" của bạn các mục DB hiện tại sẽ được một giá trị NULL, thay vì một chuỗi rỗng. Và học thuyết có thể xử lý một chuyển đổi giá trị cơ sở dữ liệu NULL thành mảng Doctrine Type. Nó chỉ là tham chiếu mảng NULL. Và PHP rỗng() không quan tâm nếu mảng có kích thước bằng không hoặc NULL.

Trong MySQL, tôi nhận được sql-dump sau:

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

mặc dù tôi có cùng một sql-dump, điều này không làm việc cho tôi khi tôi đang nhận được cùng một lỗi. – apfz

+0

Mẹo hay! Đáng buồn thay, tôi đã aleady đã thử các giải pháp ở trên, và đã bị mắc kẹt với rất nhiều lĩnh vực với chuỗi rỗng thay vì NULL. Tôi đã giải quyết vấn đề đó bằng cách chạy câu lệnh sau: học thuyết ứng dụng/bàn điều khiển: truy vấn: sql "CẬP NHẬT << your_table_name >> SET <> = NULL WHERE <> = ''" – qualbeen

Các vấn đề liên quan