laravel与其他pivot数据的多对多关系

rdrgkggo  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(473)

我正在吃晚饭 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 .
中的所有ID user_record 是各个字段的外键。
这是所谓的草率关系吗?如果是的话 user_roles()User 模特长什么样?

public function user_roles()
{
    return $this->belongsToMany(UserRole::class, 'record_user', 'user_id', 'record_id');
}
uidvcgyl

uidvcgyl1#

不,你有一个典型的 Many To Many 关系,其中包含两个表和包含 id 两者都是。
这种关系应该包含两者 id 而是像:

public function user_roles()
{
    return $this->belongsToMany(UserRole::class, 'user_record', 'user_id', 'user_role_id');
    ______________________________________________^^^^^^^^^^^_______________^^^^^^^^^^^^
}

相关问题