如何存储与多态相关的模型

时间:2018-12-31 14:23:34

标签: eloquent

我正在一个有很多用户的系统上工作,每个用户都有自己的信息,因此我需要为每个用户创建一个模型。另一方面,所有这些用户都具有一个通用的用户模型,从这些要求中收集他们的凭据是适合的,在所有用户类型和用户模型之间都具有多态关系,例如,将协调器作为模型,将用户作为模型I做了以下

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_typeuserable_id列不允许null。如何创建带有关联用户实体的协调器实体?

1 个答案:

答案 0 :(得分:0)

我在谷歌搜索后明白了...

Laravel One to Many Polymorphic Relationship - Create Records

这个想法不是我一开始就想的。当我使用$table->morphs('userable');时,用户表有两列,userable_id和userable_type,默认情况下和按照ORM约定,每列均不允许null,并且我认为他们认为用户表是主表和其他表(即,协调员,教育者,托运人等)作为详细信息表。根据这种最初的错误理解,我在每个表上添加了一个userid列来存储每种特定用户类型的相关用户ID,并且我想知道如何保存需要填充userable_id和userable_type的用户。特定用户首先要获取将提供给用户的userable_id的ID,这种情况类似于死锁情况,因为每个表都需要一条信息,这些信息在将数据存储到每个表后才能将其保存到每个表中,从而实现有线连接! !!。

但是,当我阅读以上链接中的文章时,我发现它以相反的方式考虑该表,这与我的想法不同(即,协调员,托运人等是主数据,用户表是详细信息) 。那是对于直接使用模型的人,但是对于那些使用存储库软件包的人,这有点棘手,您需要做一些额外的工作...