Php 将角色与一对多关系的用户关联时获取SQLSTATE[22007]错误

Php 将角色与一对多关系的用户关联时获取SQLSTATE[22007]错误,php,laravel,laravel-8,Php,Laravel,Laravel 8,我在用户和角色之间有一对多的关系。我有三个角色管理员,员工和客户。我无法将用户与角色关联 例如: 当我使用角色管理员更新用户时,我成功地将角色编辑并保存到员工和客户端,但当我在默认角色值保持不变时(即管理员)单击保存时,它会抛出一个SQLSTATE[22007]错误 请抽出一些时间看看下面 照亮\数据库\查询异常 SQLSTATE[22007]:无效的日期时间格式:1366不正确的整数值:“[3]”用于列管理用户角色id,位于第1行(SQL:update用户设置角色id=[3],用户更新时间=2

我在
用户
角色
之间有一对多的关系。我有三个角色
管理员
员工
客户
。我无法将用户与角色关联

例如: 当我使用角色
管理员
更新用户时,我成功地将角色编辑并保存到
员工
客户端
,但当我在默认角色值保持不变时(即
管理员
)单击保存时,它会抛出一个SQLSTATE[22007]错误

请抽出一些时间看看下面

照亮\数据库\查询异常 SQLSTATE[22007]:无效的日期时间格式:1366不正确的整数值:“[3]”用于列
管理
用户
角色id
,位于第1行(SQL:update
用户
设置
角色id
=[3],
用户
更新时间
=2021-01-29 05:08:12其中
id
=3)

  • 数据库结构
  • 用户模型
  • 榜样
  • 用户控制器

问题是您试图将角色的id值分配给数组而不是整数

尝试将角色\u id保存为整数角色id,如:

$user->role_id = 1;
$user->save();
而不是

$user->role_id = [1];
$user->save();
编辑

根据守则,

public function updateUser(User $user)
{
    $this->resetValidation();
        
    $this->user = $user;
    $this->role = $user->role_id; //This should world now
    $this->showUserUpdationModal = true;
}

但是我怎么做呢,我不明白,因为我从roles表
@foreach($roles as$role){{{{$role->name}}@endforeach
,然后我马上赋值,我怎么能把它定义为一个整数呢?从
$this->role
中得到的值是多少?更新了答案谢谢各位朋友!是否有其他方法可以调用角色关系并从表中选择id?类似于
$user->role()->select('id')。是的。使用
$user->role->id
public $showUserUpdationModal = false;
public $role;
public User $user;

protected $rules = [
    'user.name' => 'required|string|max:255',
    'user.email' => 'required|string|email|max:255',
    'role' => 'required',
];

public function updateUser(User $user)
{
    $this->resetValidation();
        
    $this->user = $user;
    $this->role = $user->role()->pluck('id');
    $this->showUserUpdationModal = true;
}

public function storeUser()
{
    $this->validate();
    $this->validate([
        'user.email' => 'unique:users,email,'.$this->user->id,
    ]);
    $this->user->role()->associate($this->role);
    $this->user->save();
    $this->showUserUpdationModal = false;

    $this->dispatchBrowserEvent('notify', $this->user->name.' Updated Successfully');
    $this->emit('sectionRefresh');
}
$user->role_id = 1;
$user->save();
$user->role_id = [1];
$user->save();
public function updateUser(User $user)
{
    $this->resetValidation();
        
    $this->user = $user;
    $this->role = $user->role_id; //This should world now
    $this->showUserUpdationModal = true;
}