我是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_member
(group_id
,member_id
)值(2,7,5))
这5来自哪里?为什么我会收到此错误?
谢谢
答案 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);
}