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;
}