isaacqc/laravel-single-table-inheritance

一个包含使用eloquent(Laravel ORM)进行单表继承模型的包

1.0.4 2017-07-31 15:13 UTC

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

Build Status

要求

  • 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 文件夹。

请注意,每个模型只能从属于其类型的行中获取数据,即使所有数据都存储在同一张表中!你只能设置和获取与当前模型及其父级相关的属性。如果你想获取表中的所有数据,你应该创建自定义查询。