我正在一个有很多用户的系统上工作,每个用户都有自己的信息,因此我需要为每个用户创建一个模型。另一方面,所有这些用户都具有一个通用的用户模型,从这些要求中收集他们的凭据是适合的,在所有用户类型和用户模型之间都具有多态关系,例如,将协调器作为模型,将用户作为模型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_type
和userable_id
列不允许null
。如何创建带有关联用户实体的协调器实体?
答案 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,这种情况类似于死锁情况,因为每个表都需要一条信息,这些信息在将数据存储到每个表后才能将其保存到每个表中,从而实现有线连接! !!。
但是,当我阅读以上链接中的文章时,我发现它以相反的方式考虑该表,这与我的想法不同(即,协调员,托运人等是主数据,用户表是详细信息) 。那是对于直接使用模型的人,但是对于那些使用存储库软件包的人,这有点棘手,您需要做一些额外的工作...