2016-04-26 11 views
8

Tôi đang cố gắng để có một đặc điểm Fileable sẽ cung cấp cho Entity các phương thức để CRUD Files dựa trên File Entity được đề cập dưới đây.Sử dụng Doctrine và Symfony để tạo Polymorphic như các hiệp hội

Sau khi đọc tài liệu trên Doctrine và tìm kiếm trên internet, tốt nhất tôi có thể tìm là Inheritance Mapping nhưng tất cả đều yêu cầu phân lớp mở rộng siêu lớp không lý tưởng vì thực thể đã mở rộng các lớp khác. Tôi có thể có một thực thể FileFoo và một thực thể FileBar nhưng điều này trở nên quá lộn xộn và yêu cầu phải tham gia thêm (super ->sub ->entity).

Ngoài ra, tôi có thể có một Entity tập tin trong đó có nhiều cột cho thực thể (vì vậy foo_id cho đối tượng Foo, bar_id cho đối tượng bar và vân vân) nhưng điều này trở nên lộn xộn và sẽ đòi hỏi một cột mới cho mỗi thực thể mà tôi 'd muốn thêm đặc điểm Fileable quá.

Vì vậy, đối với các câu hỏi: Tôi có đang suy nghĩ về cách tôi muốn giữ dữ liệu không chính xác không? Có một số tính năng/chức năng trong Doctrine/Symfony mà tôi đã bỏ lỡ không? Bạn có nghĩ rằng tôi có tính năng như thế này sẽ được thêm vào nếu tôi đến ngã ba Doctrine để thêm tính năng này, tôi cũng nên tìm ở đâu?

<?php 
/** 
* File 
* 
* @ORM\Table() 
* @ORM\Entity() 
* @ORM\HasLifecycleCallbacks() 
*/ 
class File 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(type="integer") 
    * @ORM\Id() 
    * @ORM\GeneratedValue() 
    */ 
    protected $id; 
    /** 
    * @var string 
    * 
    * @ORM\Column(type="string") 
    */ 
    protected $entityName; 
    /** 
    * @var string 
    * 
    * @ORM\Column(type="string") 
    */ 
    protected $entityId; 
... 
+1

Bạn có thực sự cần mặt trái của thực thể -> Mối quan hệ tệp không? Bởi vì tôi có trên một trong các dự án của tôi một giao diện 'FileableInterface', và vì tôi không phải truy cập' Entity' từ 'File', nên tôi tránh bất kỳ cấu hình phức tạp nào của Doctrine. Vì vậy, tất cả phụ thuộc vào những gì bạn cần, nhưng nếu bạn không cần sử dụng '$ file-> getEntity()', chỉ xác định bên sở hữu của mối quan hệ có thể là đủ. – Terenoth

Trả lời

1

Tôi đã hoàn thành một điều tương tự bằng cách sử dụng Thừa kế được xác định trong các đặc điểm, cùng với các giao diện, về cơ bản đã cho tôi những gì mở rộng nhiều.

1

Hãy xem embeddables hoặc bạn có thể sử dụng các đặc điểm.

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