当前位置: 首页 > 知识库问答 >
问题:

Laravel将用户名同步到数据透视表中

东方明亮
2023-03-14

我在我的role_user透视表中有一个额外的用户名列,如何将用户名与角色同步?

role\u用户pivot表

我需要在name字段中同步用户名

这是更新功能,我在其中添加了sync

public function update(Request $request, User $user)
    {
       
        $role = $request->role;

        $userName = Auth::user();

        $user->roles()->sync([$role=>['name'=>$userName->name]]);

        dd('stop'); 
   }

这是我的User Model中的关系

 public function roles()
{
    return $this->belongsToMany(Role::class)->withPivot(['name'])->withTimestamps();
}

下面是role_user表迁移

 class CreateRoleUserTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('role_user', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->unsignedBigInteger('role_id');
            $table->unsignedBigInteger('user_id');
            $table->string('name')->nullable();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('role_user');
    }
}

这是我在转储请求并验证用户名时得到的结果

转储代码

  $userName = Auth::user();

    dump('Auth user name  = '.$userName->name);

    dump($request->all());

    dd('stop');

共有2个答案

林星阑
2023-03-14

好吧,你几乎做对了。除了...

你需要这样写它(使用集合mapBackKeys方法):


$roles = collect($request->role)->mapWithKeys(function($role){
    return [$role => ['name' => Auth::user()->name];
})->toArray();

$user->roles()->sync($roles);

原因是您需要分别为每个角色指定透视表参数。因此,不是[[1,2]=

宗政功
2023-03-14

您需要一个由角色id键控的关联数组,每个元素都有一个数组,以便向透视表添加内容。目前,您只有一个角色ID数组,这对于sync来说很好,但如果您还想设置额外的透视数据,就不需要了。您需要一个如下所示的数组:

[1 => ['name' => ...], 2 => ['name' => ...]]

您可以使用array\u fill\u keys构建此数组,其中键是角色ID,值是带有“name”字段的数组:

$roles = (array) $request->input('role', []);

$forSync = array_fill_keys($roles, ['name' => $userName->name]);
 类似资料:
  • 我正在制作一个VueJS表单,用户可以在其中编辑一个步骤。一个步骤可以有许多父产品。逻辑是一个步骤可以属于多个产品。我有一个名为products、product_step(透视表)和steps的表。 当用户第一次加载页面时,该数组将填充此stap的父产品。 此阵列将根据用户决定在前端执行的操作进行更改。假设他们希望产品n不再具有此步骤的访问权限。在这种情况下,产品将从阵列中删除。 我面临的问题是,

  • 事实上,我的问题很简单,但我找不到任何答案。 我使用的是Laravel Elotent,我有3张桌子: 一个数据透视表叫做: 我已经从我的公司对象中获得了,我正在尝试获取

  • 我有下面的表格,我想检索每个喜欢评论的用户喜欢的评论的数量(类似于Instagram评论,任何人都可以喜欢其他用户的评论) 它用于保存评论链接,看起来像Instagram评论,任何用户都可以喜欢其他用户的评论。 这是我的用户模型代码: 以下是我的Ask模型代码: 这是我的用户模型代码: 这是我的评论模型代码: 我想用他们的评论检索最新的ask,包括评论的数量和数据** 我使用了这个代码,但它显示错

  • 我正在建立一个音乐发现服务。我的问题是:如何将数据插入到三方数据透视表Tag_Track_User? 我在LaravelSD看到了这个模式 它包括六个主要表(和其他几个):艺术家,专辑,曲目,标签,用户和Tag_Track_User 艺术家们 标签、轨迹和用户都是相互关联的,因为没有第三个,任何两个都不可能存在。 艺术家有许多()专辑 专辑有许多歌曲,属于艺术家 曲目belongsTo()相册 跟

  • 问题内容: 用户模型: 职位模型: 在表单提交时,我有两个数组: 使用 可以按预期将position_user表与用户和相应的位置ID同步。 但是我不知道如何填充多余的字段(“ company_id”) 这是我期望的工作方式: 我已经阅读了手册,但是我只是看不到如何处理这些数组,因为手册中的示例似乎与以下情况有关:要填充的额外字段不是多个项目的数组: 我尝试使用此答案 合并两个数组: 并获得$ s

  • 我有一个用户表和一个帐户表。 此帐户表定义用户可以拥有的帐户。 例如 账户: 用户: 我现在有另一个表:users\u accounts 我正在为新用户创建一个界面。在这个页面上,我有基本的细节,但也有一个复选框列表(从accounts表创建)。复选框表示用户需要为其设置的帐户。 我要做的是创建帐户时: 我还想将用户ID和他们需要设置的帐户添加到users_accounts表中。单个用户可能需要多