我有一个users
桌子:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `users_name_unique` (`name`)
) ;
,然后是user_roles
表,其定义如下:
if (!Schema::hasTable('user_roles')) {
Schema::create('user_roles', function (Blueprint $table) {
$table->increments('id');
$table->string('role');
$table->timestamps();
$table->softDeletes();
});
}
并存储诸如actor
,director
等的值
还有一个user_record
数据透视表:
if (!Schema::hasTable('user_record')) {
Schema::create('user_record', function (Blueprint $table) {
$table->integer('record_id')->unsigned();
$table->integer('user_id')->unsigned();
$table->integer('user_role_id')->unsigned();
$table->string('character_name');
$table->integer('ranking');
});
}
因此,一个Record
有很多User
,与此User_Role
来说有很多Record
。
user_record
中的所有ID是相应字段的外键。
这是否称为hasManyThrough关系?如果是,则user_roles()
模型中的User
看起来如何?
public function user_roles()
{
return $this->belongsToMany(UserRole::class, 'record_user', 'user_id', 'record_id');
}
答案 0 :(得分:1)
不,您在这里有一个典型的简单 Many To Many
关系,其中有两个表,第三个枢轴包含两个表的id
。
该关系应同时包含id
,例如:
public function user_roles()
{
return $this->belongsToMany(UserRole::class, 'user_record', 'user_id', 'user_role_id');
______________________________________________^^^^^^^^^^^_______________^^^^^^^^^^^^
}