具有多对多关系的存储方法的数据截断错误

Data truncated error on store method with ManyToMany relationships

我是 Laravel 的新手,在处理多对多关系时遇到问题。

我有两个table:

一个成员可以属于多个组,一个组可以有多个成员。

我已经在模型和枢轴中创建了关系 table。

当我创建成员时,我有组的复选框。

在我的存储方法中,我这样做:

....
$member->save();

if(isset($request->groups)) {
 $groups = implode(',', $request->groups);
 $member->groups()->sync([$groups]);
}

dd($groups) 给出:“2,7”

我收到错误:

QueryException in Connection.php line 761: SQLSTATE[01000]: Warning: 1265 Data truncated for column 'group_id' at row 1 (SQL: insert into group_member (group_id, member_id) values (2,7, 5))

这个 5 是从哪里来的,为什么会出现这个错误?

谢谢

此错误是由于您输入的数据类型所致。

使用

implode()

您将数组转换为字符串,而 sync() 方法需要一个数组作为输入。让我们试试:

 $member->save();

 if(isset($request->groups)) {
    $member->groups()->sync($request->groups);
 }

为了避免因逗号分隔的字符串而可能出现的不一致,我将转换
$request->groups,这是一个字符串,在将其添加到同步函数之前将其添加到标准数组。

if(isset($request->groups)) {
    $groupIds = array($request->input('groups'));
    $member->groups()->sync($groupdIds);
}