isaacqc / laravel-single-table-inheritance
一个包含使用eloquent(Laravel ORM)进行单表继承模型的包
Requires
- php: >=5.3.0
- illuminate/support: ~5
Requires (Dev)
- illuminate/database: ~4
- mockery/mockery: 0.9.*
- orchestra/testbench: 2.2.*
This package is auto-updated.
Last update: 2024-09-08 19:48:30 UTC
README
#Laravel-Single-Table-Inheritance
将领域模型映射到关系型数据库是困难的。因此有多种方法可以实现这一点。单表继承是其中之一。这种方法的优点是:
- 简单
- 在层次结构中移动列不需要数据库更改。但这种方法也有一些缺点:
- 没有元数据来定义哪个属性属于哪个子类型:直接查看表有点奇怪
- 如果你创建了多个层次结构,表将很快成为瓶颈
- 你浪费了一些空间(取决于数据库管理系统对null的压缩)
Laravel-Single-Table-Inheritance 是一个提供简单和基本模型来处理使用 eloquent ORM 的单表继承的包。请注意,这个模式来自 Martin Fowler(企业应用架构模式)。更多信息请参考此链接: 单表继承。还可以查看我关于 单表继承 的帖子。
- 作者: Jacopo Beschi
- 版本: 1.0.2
要求
- PHP >= 5.4
- Composer
- Laravel 框架 4.2+ 注意:如果你需要使用 laravel 4.0.* 或 4.1.*,请下载包的 1.0.1 版本
##使用 Composer 安装
要使用 Composer 安装 Laravel-Single-Table-Inheritance,请将以下行添加到你的 composer.json 文件中的 `require` 字段
"jacopo/laravel-single-table-inheritance": "1.0.*"
恭喜!你已成功安装此包。
##使用方法
要使用此包,你需要在你模型的类中扩展 Jacopo\LaravelSingleTableInheritance\Models\Model
。然后你需要更改以下模型属性
- protected $table_type
- protected static $table_type_field
- protected $my_attributes
字段 $table_type
包含将被保存在 $table_type_field
列中的字符串,以区分当前模型和其他保存在表中的模型。字段 $my_attributes
是一个数组,包含属于当前模型的所有属性(不包括自动设置的创建时间 created_at、更新时间 updated_at 和删除时间 deleted_at)。为了更好地了解如何设置你的模型,你最好查看 examples 文件夹。
请注意,每个模型只能从属于其类型的行中获取数据,即使所有数据都存储在同一张表中!你只能设置和获取与当前模型及其父级相关的属性。如果你想获取表中的所有数据,你应该创建自定义查询。