【问题标题】:Laravel Many to many to many syncLaravel 多对多同步
【发布时间】:2022-03-04 04:47:48
【问题描述】:

我在 Laravel 工作了几天后遇到了一个问题。

我的数据库如附图。database

用户角色多对多关系正常工作。

此外,我想在 role_user 数据透视表中添加另一个多对多关系。所以我做了:

user.php:

public function roles()
{
   return $this->belongsToMany(Role::class);
}

public function role_users()
{
   return $this->hasMany(RoleUser::class);
}

role.php:

public function users()
{
   return $this->belongsToMany(User::class);
}

public function role_users()
{
   return $this->hasMany(RoleUser::class);
}

和中枢roleUser.php:

public function user()
{
   return $this->belongsTo(User::class);
}

public function role()
{
   return $this->belongsTo(Role::class);
}

public function tags()
{
   return $this->belongsToMany(Tag::class);
}

当我填充表格时,我可以获得数据:关系工作。

现在我想保存数据并让 Laravel 自动填充表格。此时此刻,我将角色数据保存在 users.php 中:

$this->Roles()->sync($roles);

($roles 是来自表单请求的 json 数组数据..)。

数据透视表获取 user_idrole_id。好的,很酷。

现在,当我添加角色时,我应该写什么来在 role_user 数据透视表中获取 role_user_idtag_id

提前谢谢你!

【问题讨论】:

  • 我试过了:$this->role_users()->tags()->sync($someData);但出现错误“调用未定义的方法 Illuminate\Database\Eloquent\Relations\HasMany::tags()”

标签: php laravel controller many-to-many


【解决方案1】:

我认为你应该使用

$this->Roles()->attach($roles);

而不是

$this->Roles()->sync($roles);

因为如果我没记错的话,同步会删除数据透视表。您应该将 primary_key 和 foreign_key 传递给您的 belongsToMany 函数。如果您想向数据透视表中的数据透视列添加数据,请尝试添加->withPivot('column name');

【讨论】:

  • 探针不在第一个数据透视表(role_user 表)上,而是第二个数据轴(role_user_tag)。对于方法附加或同步,无论因为我在我的用户控制器中使用创建/更新方法。我也简化了一点代码,我确实在使用 withPivot('xxx') ;)
猜你喜欢
  • 2015-02-14
  • 2021-07-22
  • 2021-01-13
  • 2021-12-21
  • 1970-01-01
  • 2020-11-10
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
相关资源
最近更新 更多