Đây là cơ sở của tôi/thực thể cha mẹ, thiết lập để con cái của nó đang sử dụng bảng của riêng mình.Thực thể thừa kế bảng đơn có thể mở rộng thực thể kế thừa bảng lớp không?
/** * @ORM\Entity * @ORM\Table(name="layer_object") * @ORM\InheritanceType("JOINED") * @ORM\DiscriminatorColumn(name="discr", type="string") * @ORM\DiscriminatorMap({"service"="Service", "aircraft"="Aircraft", ...}) */ class LayerObject {}
Thực thể máy bay. Một đứa trẻ đơn giản đang làm tốt
/** * @ORM\Entity * @ORM\Table(name="aircraft") */ class Aircraft extends LayerObject
Thực thể dịch vụ. Một đứa trẻ phức tạp, chính nó đang sử dụng kế thừa bảng đơn.
/** * @ORM\Entity * @ORM\Table(name="service") * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="discr", type="string") * @ORM\DiscriminatorMap({"ground"="Ground", "onboard"="Onboard"}) */ class Service extends LayerObject {}
Một đứa trẻ của đơn vị dịch vụ
/** * @ORM\Entity */ class Ground extends Service {}
app/console doctrine:schema:validate
thấy không có lỗi nhưng app/console doctrine:schema:update --force
chỉ sẽ không tạo bảng 'dịch vụ', một trong đó nên sử dụng bảng duy nhất thừa kế. Có vẻ như định nghĩa thực thể dịch vụ chỉ bị bỏ qua.
Chắc chắn tôi có thể tạo SQL cho bảng này bằng tay, nhưng ứng dụng sẽ phát triển và tại một số điểm tôi sẽ cần sử dụng di chuyển.
Có ai có thể chỉ cho tôi theo một số hướng không? Cảm ơn.
Tìm thấy một bản sao, nhưng không có câu trả lời cho đến nay, xem: Doctrine 2 multiple level inheritance
Edit:
Khi tôi sử dụng lớp bảng thừa kế cho cấp 2 quá (@ORM\InheritanceType("JOINED")
cho đơn vị Service
) nó hoạt động khá tốt. Xem: Doctrine2 Multiple level inheritance
Cảm ơn rất nhiều. Điều này về cơ bản có nghĩa là: 'Chọn loại thừa kế của bạn một lần ở lớp trên cùng và gắn bó với nó'. Bây giờ điều này là tốt cho ứng dụng của tôi ... – virtualize