如何在 laravel 8 的 pivot_table 中调用其 id 作为 foreign_id 传递的主表中的列?

Posted

技术标签:

【中文标题】如何在 laravel 8 的 pivot_table 中调用其 id 作为 foreign_id 传递的主表中的列?【英文标题】:how to call the column from main table whose id is being passed as foreign_id in pivot_table in laravel 8? 【发布时间】:2021-09-30 08:00:31 【问题描述】:

我在从主表和数据透视表中获取列时遇到问题。 所以我有两个表名:用户和角色以及一个名为 role_user 的数据透视表。 这是用户表的迁移:

Schema::create('users', function (Blueprint $table) 
    $table->engine = 'InnoDB';
    $table->id();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamp('email_verified_at')->nullable();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();
);

这里是角色迁移:

Schema::create('roles', function (Blueprint $table) 
    $table->id();
    $table->string('name');
    $table->string('slug')->nullable();
    $table->timestamps();
);

这里是数据透视表的迁移:

Schema::create('role_user', function (Blueprint $table) 
    $table->engine = 'InnoDB';
    $table->id();
    $table->unsignedBigInteger('user_id');
    $table->unsignedBigInteger('role_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->foreign('role_id')->references('id')->on('roles');
    $table->timestamps();
);

这是 phpMyAdmin 中 role_user 表中的数据: enter image description here

以下是关系: 用户:

public function roles() 
     return $this->belongsToMany(role::class,'role_user','role_id','user_id')->using(RoleUser::class);

和角色:

public function users()    
   return $this->belongsToMany(User::class,'role_user','user_id','role_id')->using(RoleUser::class);


        

但现在主要是我必须以表格形式显示它们,我必须在其中显示与分配给它的角色名称相关联的用户名称。

比如,用户是 tom,角色是管理员。 如何通过名称以表格形式准确显示它们? 有什么帮助吗?如何解决?

我应该调用role_user表并在foreach下调用user还是使用pivot方法来做到这一点?

【问题讨论】:

【参考方案1】:

因此,在您想要列出用户角色的部分,您可以在刀片中执行类似的操作。

@foreach($users as $user)
<tr>
    <td>$user->name</td>
    <td>
        @foreach($user->roles as $role)
            $role->name
        @endforeach
    </td>
</tr>
@endforeach

如果您只需要可以使用的时间戳

$this->belongsToMany(role::class,'role_user','role_id','user_id')
    ->using(RoleUser::class)->withTimestamps();

或者创建一个模型直接与 role_user 表交互。

【讨论】:

谢谢兄弟,但我必须用 role_user 表来做这件事,正如我上面所说的,并且从图片中给出了角色 ID 和用户 ID 的保存位置 那么您需要时间戳吗?您总是可以创建一个使用该表的模型来简化此操作? 嘿...你能帮我解决这个问题吗:***.com/q/68373453/16445004 一周以来一直在努力解决这个问题

以上是关于如何在 laravel 8 的 pivot_table 中调用其 id 作为 foreign_id 传递的主表中的列?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 8 中进行分页?

Laravel 8 + Tinker:如何创建虚拟数据

我如何在 mac high sierra 上安装 Laravel 8

如何在 Laravel 8 上获得正确的路线

如何在路线中添加部分 ID - Laravel 8

如何在 Laravel 8 中解密 cookie