首页 > 解决方案 > 如何存储多态相关模型

问题描述

我正在开发一个有很多用户的系统,每个用户都有自己的信息,所以我需要为每个用户创建一个模型。另一方面,所有这些用户都有一个共同的用户模型,其中他们的凭据是从那些要求中收集的做了以下

class Coordinator extends Model
{
    protected $fillable= ['userid', ...];
    ...

    public function user()
    {
        return $this->morphOne(User::class, 'userable');
    }
}

class User extends Model
{
    ...

    public function userable()
    {
        return $this->morphTo();
    }
}

class CreateUsersTable extends Migration
{
    public function up()
    {
        $table->bigIncrements('id');
        ...
        $table->morphs('userable');
    }
}

class CreateCoordinatorsTable extends Migration
{
    public function up()
    {
        $table->bigIncrements('coordid');
        ...
       $table->foreign('userid')->references('ID')->on('wp_users')->onDelete('cascade');
    }
}

迁移后,我注意到列userable_type并且userable_id不允许null. 我如何创建一个具有关联用户实体的协调器实体?

标签: eloquent

解决方案


谷歌搜索后我得到了它...

Laravel 一对多多态关系 - 创建记录

这个想法和我一开始想的不太一样。当我使用$table->morphs('userable');用户表有两列,userable_id 和 userable_type,默认情况下和 ORM 约定都不允许 null作为明细表。根据这个最初的错误理解,我在每个表中添加了一个 userid 列来存储每个特定用户类型的相关用户 id,我想知道如何通过保存来保存需要填充 userable_id 和 userable_type 的用户特定用户首先获取其将提供给用户的 userable_id 的 id 这种情况类似于死锁情况,因为每个表都需要一条信息,在将数据存储到每个表之后才能知道该信息,以便能够将数据保存到每个表,连线! !!

但是,当我阅读上述链接中的文章时,我发现它以相反的方式考虑表,这与我的想法不同(即协调员、托运人等是主人,而用户表是细节)。这适用于直接使用模型的人,但对于那些使用存储库包的人来说,这有点棘手,你需要做额外的工作......


推荐阅读