Tôi có một cơ sở dữ liệu rất đơn giản mà tôi đang cố gắng nhập và tạo các thực thể từ đó. Doctrine (Symfony) có thể tạo các tệp ánh xạ YML từ cơ sở dữ liệu. Nhưng khi tôi cố gắng tạo ra các thực thể, tôi nhận được lỗi sau:Symfony2/Doctrine2 Tệp ánh xạ không hợp lệ Ngoại lệ khi cố gắng tạo các đối tượng
[Doctrine\Common\Persistence\Mapping\MappingException]
Invalid mapping file 'SandboxBundle.Entity.Product.orm.yml' for class
'SandboxBundle\Entity\Product'.
Tệp yml có vẻ ổn với tôi, như chúng ta mong đợi là nó được tạo bởi Doctrine. Chỉ cần chắc chắn, tôi đã kiểm tra nó với trình xác thực yml trực tuyến cho biết điều đó là OK. Lệnh tôi đã sử dụng để cố gắng tạo các thực thể là:
app/console generate:doctrine:entities sandbox
Các tệp .yml theo sau. Vui lòng giải thích bất kỳ lỗi khoảng cách yml nào là kết quả của việc dán tệp tại đây. Như tôi đã nói, các tệp yml được tạo bởi học thuyết và đã vượt qua xác minh trực tuyến.
Product:
type: entity
table: product
indexes:
category_id:
columns:
- category_id
id:
id:
type: integer
nullable: false
unsigned: false
comment: ''
id: true
generator:
strategy: IDENTITY
fields:
productname:
type: string
nullable: true
length: 10
fixed: false
comment: ''
categoryId:
type: integer
nullable: true
unsigned: false
comment: ''
column: category_id
lifecycleCallbacks: { }
Và để hoàn chỉnh, đây là tệp Danh mục yml. Lỗi trên Sản phẩm, nhưng tôi cho rằng đó là do Sản phẩm đã được xử lý trước.
Category:
type: entity
table: category
id:
id:
type: integer
nullable: false
unsigned: false
comment: ''
id: true
generator:
strategy: IDENTITY
fields:
categoryname:
type: string
nullable: true
length: 50
fixed: false
comment: ''
lifecycleCallbacks: { }
Tôi đã tìm kiếm trên web bất kỳ tài nguyên nào liên quan đến chẩn đoán Ngoại lệ ánh xạ, nhưng chưa tìm thấy bất kỳ tài liệu nào. Tôi đoán rằng có một cái gì đó trong các tập tin YML đó là gây ra các máy phát thực thể để choke. Nhưng thông báo lỗi không đưa ra dấu hiệu nào về những gì có thể xảy ra. Tôi thấy có rất nhiều trường hợp loại câu hỏi này trên Stack Overflow. Nó sẽ là tuyệt vời để có được thông tin về CÁCH để chẩn đoán các loại lỗi, và do đó có thể tìm ra cho chính mình.
Đồn, nó không phải là một giải pháp, nhưng bạn làm có một tùy chọn để chạy lệnh 'generate entity' của bạn với tùy chọn 'verbose'. Điều này sẽ cung cấp cho bạn một bãi chứa PHP stack, và sau đó bạn có thể bắt đầu đào sâu vào mã Doctrine, ít nhất để xem những gì đang thất bại. tuy nhiên, gợi ý rằng nếu bạn định bắt đầu poking xung quanh trong mã của nhà cung cấp, hãy thêm các câu lệnh chẩn đoán 'print_', và tương tự, bạn làm điều đó trong một cá thể kiểm thử của Symfony mà bạn tạo riêng cho mục đích này. –