2011-10-02 23 views
7

Làm cách nào tôi có thể đặt tên khóa ngoài (chỉnh sửa: không phải là tên của thuộc tính) cho mối quan hệ nhiều-một trong một "vùng" bằng cách sử dụng YAML?Đặt tên cho một mối quan hệ trong Doctrine 2 ORM?

SWA\TestBundle\Entity\Province: 
    type: entity 
    table: province 
    uniqueConstraints: 
    UNIQUE_PROVINCE_CODE: 
     columns: code 
    id: 
    id: 
     type: integer 
     generator: { strategy: AUTO } 
    fields: 
    code: 
     type: integer 
    name: 
     type: string 
     length: 255 
    short_name: 
     type: string 
     length: 2 
    manyToOne: 
    region: 
     targetEntity: Region 
     inversedBy: provinces 

Trả lời

11

Nhìn vào getCreateConstraintSQL method in the AbstractPlatform class để xem cách các tên của khóa ngoại được chọn (line 1088).

Nó được lấy trực tiếp từ tên ràng buộc. Ảnh hưởng đến tên hạn chế sẽ ảnh hưởng đến tên khóa ngoại.

Để giải quyết sự cố, bạn có thể bỏ ràng buộc và tạo lại bằng một tên mới trong a doctrine migration.

+0

Vì vậy, không có cách "tiêu chuẩn" thay đổi nó - ngoài quy trình di chuyển? Tên là hoàn toàn ngẫu nhiên tôi đoán, giống như FK_28392f89329. – gremo

+1

Vâng, bạn có thể quá tải các lớp nền tảng nhưng tôi không nghĩ rằng nó có giá trị nó chỉ vì lợi ích của việc đặt tên hạn chế. –

+0

Đồng ý. Cảm ơn, tiền thưởng + trả lời cho bạn! – gremo

3

Do câu trả lời @JakubZalas, tôi đã xem xét mã trong Github và đã thấy rằng việc thay đổi mã khung để thực hiện những gì bạn muốn thực sự dễ dàng.

Nếu bạn kiểm tra thư mục mà lớp AbstractPlatform là, bạn sẽ thấy rằng có một lớp ForeignKeyConstraint. Trong đó bạn sẽ thấy nó kế thừa từ AbstractAsset.

Lớp AbstractAsset có phương thức _generateIdentifierName. Nếu bạn kiểm tra phương thức này trong github bạn sẽ thấy rằng nó có phần nhận xét không chỉ là những gì bạn muốn. Bạn chỉ cần bỏ ghi chú phần này, bình luận phần hoạt động thực tế, thay đổi tham số tiền tố $ thành $ postfix và bạn đã hoàn tất. Tên ràng buộc sẽ được tạo ra bằng cách sử dụng tên bảng và cột với một postfix tương ứng.

File AbstractAsset.php là thư mục này: Symfony/vendor/doctrine/DBAL/lib/Học thuyết/DBAL/Schema

tôi đã cố gắng trong dự án của tôi kiến ​​nó làm việc tốt.

Một thông tin cuối cùng: ít nhất cho dự án của tôi phần nhận xét tôi đề cập ở trên chỉ có trong github, không có trong tệp tại máy cục bộ của tôi.

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