首页 > 解决方案 > Laravel:如何使用 select2 将多个数据插入 mysql 数据库?

问题描述

我正在尝试将数据插入数据库。但我不知道如何将多选数据插入 mysql 数据库。

在此处输入图像描述

<div class="form-group">
    <select name="languages[]" class="select2 form-control" multiple="multiple "required>
        <option selected>English</option>
        <option VALUE="french">French</option>
        <option VALUE="german">German</option>
        <option VALUE="spanish">Spanish</option>
        <option VALUE="turkish">Turkish</option>
        <option VALUE="italian">Italian</option>
    </select>
</div>
</div>

控制器

public function store(Request $request)
{
    User::create($request->all());
    return redirect()->back();
}

返回错误

ErrorException 数组到字符串的转换

标签: phplaravel

解决方案


$request->languges是一个数组,您不能将数组保存到VARCHAR()字段中。
在您的 name 属性中,languages[]将创建一个数组,而不是字符串。而 name 属性 languages创建一个字符串
如果您有一个数组,那么您需要在控制器中使用 foreach 循环。
使用select2您需要在发送多个数据时创建一个数组。
table属性需要是字符串而不是数组,所以让我们将数组转换为字符串

使用服务器端

使用foreach

public function store(Request $request)
{
    $data = $request->all();
    $x = NULL;
    foreach($request->languages as $key => $value) {
      $x .= $value .", ";
    }
    $data['languages'] = $x;
    User::create($data);
    return redirect()->back();
}

或者,使用内爆

public function store(Request $request)
{
    $data = $request->all();
    $data['languages'] = implode(',', $request->languages);
    User::create($data);
    return redirect()->back();
}

对于客户端,jQuery

您的标题说“将选择框的选定值作为字符串发送到 PHP”。您可以在 JS 中通过捕获表单的提交事件并使用.join()来更改该字段的值来做到这一点。

$('#formid').on('submit', function(){
    $('#e1').val($('#e1').val().join(','));
});

您的表格(未给出)需要一个 id<form id="formid" ...>


推荐阅读