Laravel Morph关系在数据库层如何维护数据完整性?

问题描述 投票:0回答:1

基于 SaaS 的系统的背景下,我正在使用 Laravel 的 Morph 关系技术 设计一个角色管理系统。该系统涉及为公司实体和管理员用户分配角色。我计划使用单个角色表来实现此目的,并且我正在考虑该表的结构。

具体来说,我正在寻找有关如何确保数据库级别的数据完整性的指导。我打算在角色表中使用两列(如果有其他最佳方法请建议我):

  • roleable_id(可以包含 1、2、3、4 等 ID)
  • roleable_type(代表实体的类型,例如 Company::class 或 Admin::class)

我主要关心的是如何在数据库中建立外键(FK)和索引,将这些列链接到各自的表,确保保持数据完整性。

我经常发现这方面令人困惑,并且我非常感谢您帮助理解实现 FK 和索引的最佳实践,以保证这种情况下的数据完整性

我举个例子吧

我们有这些

roleable_id 角色类型 名字
1 公司::班级 角色名称1
2 管理员::班级 角色名称2

然后如何确保这个组合(Company::class + 1)要么指向公司表/模型,要么指向管理模型/表。

我只是对添加索引时迁移相关的东西感到好奇,Fk 的

laravel foreign-keys migration relationship database-indexes
1个回答
0
投票

不可能,但您可以在

deleting
某个型号

上使用该事件
class User extends Model
{
    /**
     * The "booted" method of the model.
     */
    protected static function booted(): void
    {
        static::deleting(function (User $user) {
            // ...
        });
    }

或者你也可以使用模型观察者 生成者

php artisan make:observer UserObserver --model=User

然后自己编辑

class UserObserver
{

/**
     * Handle the User "deleted" event.
     */
    public function deleted(User $user): void
    {
        // ...
    }

}

然后将其添加到您的 EventServiceProvider

public function boot(): void
{
    User::observe(UserObserver::class);
}

注意:当通过 Eloquent 发出批量更新或删除查询时,不会为受影响的模型调度删除和删除模型事件。

© www.soinside.com 2019 - 2024. All rights reserved.