Laravel存储方法ManyToMany错误

时间:2016-09-23 09:01:18

标签: laravel eloquent many-to-many

我是Laravel的新手,并且遇到了ManyToMany关系的问题。

我有两张桌子: 会员 组

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

我已经在模型和数据透视表中创建了关系。

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

在我的商店方法中,我这样做:

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

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

dd($ groups)给出:" 2,7"

我收到错误: Connection.php第761行中的QueryException:SQLSTATE [01000]:警告:1265数据截断列' group_id'在第1行(SQL:插入group_membergroup_idmember_id)值(2,7,5))

这5来自哪里?为什么我会收到此错误?

谢谢

2 个答案:

答案 0 :(得分:1)

此错误是由于您输入的数据类型造成的。

使用

implode()

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

 $member->save();

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

答案 1 :(得分:0)

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

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