Laravel多对多关系以及其他数据

时间:2018-08-20 10:21:10

标签: mysql laravel many-to-many

我有一个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();
            });
        }

并存储诸如actordirector等的值

还有一个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');
}

1 个答案:

答案 0 :(得分:1)

不,您在这里有一个典型的简单 Many To Many 关系,其中有两个表,第三个枢轴包含两个表的id

该关系应同时包含id,例如:

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