因此,假设我有基本的Document
,具有title
,author
,link_to_file
属性和belongsToMany(Document)
和hasMany(Document)
递归父子关系。
现在,我想将Document
扩展为3种(或更多)类型:Letter
,Report
和Contract
,它们可以具有自己的独特性除继承属性外,属性(例如Letter
具有sender
和recepient
,Contract
可以具有诸如valid_until
之类的某些字段)。
我希望他们所有人都拥有title
属性(从Document
继承)并能够与彼此建立孩子-父母关系(Contract
可以是{{1 }},可以是另一个Letter
的父级,也可以是Contract
...的父级等),而无需对其进行硬编码。
如何在laravel中实现呢?
我的意思是扩展的东西。我知道我可以将Report
,Letter
和Report
实现为单独的实体而无需祖先类/实体的事实。
UPD::如果我是从头开始的(不涉及任何框架),那么我可能会以下面的表格(糟糕的设计,仅用于演示目的)结束:
Contract
= documents
:int,id
:枚举(Letter,Contract,Report),extension_type
:int,extension_id
:text,{{ 1}}:link
,author
:text
title
= text
:int,document_to_document
:int
document_id
= child_document_id
:int,letters
,extension_id
sender
= recepient
:int,contracts
,extension_id
valid_until
= additional_field_5
:int,reports