phl/laravel-sti

使用Eloquent的单表继承

3.0.0 2020-09-27 20:07 UTC

This package is auto-updated.

Last update: 2024-09-28 05:07:31 UTC


README

Travis

Laravel STI

这是将单表继承(STI)引入Eloquent ORM的尝试。

此包可以在laravel应用之外使用

安装

composer require phl/laravel-sti

使用

除了使用特质和添加类型列外,无需做太多。

class Member extends Illuminate\Database\Eloquent\Model
{
    use PHL\LaravelSTI\STI;
}
Schema::create('members', function ($table) {
    // ...
    $table->type();
    // ...
});

现在您可以扩展Member模型。

class PremiumMember extends Member
{
    //
}

class RegularMember extends Member
{
    //
}

并享受单表继承!

配置

默认情况下,无需进行任何配置。但是,您可能希望更改默认设置。

类型列

默认情况下,类型列名为type,如果您想使用其他名称,可以在迁移和模型中指定。

class Member extends Illuminate\Database\Eloquent\Model
{
    use PHL\LaravelSTI\STI;

    protected static $stiTypeKey = 'custom_type_column'
}
Capsule::schema()->create('members', function ($table) {
    // ...
    $table->type('custom_type_column');
    // ...
});

类型值

如果您不希望类型列包含类名,可以使用Eloquent的Relation::morphMap()函数添加名称和类之间的映射。

Relation::morphMap([
    'regular_member' => RegularMember::class,
]);

现在类型列将填充为regular_member而不是Member。这有助于避免将代码细节泄露到数据库中。

阅读源代码吧!

如果您对实现细节感兴趣,代码和测试已经进行了大量文档化:)