如何将多选数据存储到数据库laravel 5.5



我在laravel上有一个更新功能的问题,我试图从一个形式的多选发送数据,我想要的描述"组合"来存储几个项目,我从另一个表(productos)中获取这些项目,并将它们放在表单中的select中。但问题是,由于我要发送多个项目我需要将它们作为数组发送到数据库中然后得到错误

array to string conversion

这是控制器上的函数

public function update(Combos $product){
$data = request()->validate([
'name' => 'required|string|min:8|max:100',
'id' => 'required',
'description' =>'required',
]);
$user->where('id',$data['id'])->update($data);
return view('Combos')->with('combos', Combos::all())
->with('products', Products::all());
}

因为我通过select的形式发送值:

<div class="form-group" id="selector">
<label for="">Products</label>
<select multiple="multiple" class="form-control" name="description[]" >
<option value="" disabled>Select product</option>
@foreach ($products as $product)
<option value="{{$product->name}}">{{$product->name}}</option>
@endforeach
</select>
</div>  

是否有任何方法可以将数据列表传递为字符串(因为数据库上的列是字符串)。我试过使用内爆(),把$data['description]放在一个变量里面,像这样:

public function update(Combos $product){
$data = request()->validate([
'name' => 'required|string|min:8|max:100',
'id' => 'required',
'description' =>'required',
]);
$new_desc = implode(" ", $data['description']);
dd($new_desc); //prints "value1 value2 value3" as string, instead of an array
$product->where('id',$data['id'])->update($data);
return view('Combos')->with('combos', Combos::all())
->with('products', Products::all());
}

奇怪的是,当我输入dd($new_desc)时,它确实将数组转换为字符串

或者直接将data['description]放入implode()中,但即使这样也不起作用。

public function update(Combos $product){
$data = request()->validate([
'name' => 'required|string|min:8|max:100',
'id' => 'required',
'description' =>'required',
]);
implode(" ", $data['description']); 
dd($data['description']); //when I submit the update it still sends the data as an array array:2[0 => 'value1', 1 => value2]
$user->where('id',$data['id'])->update($data);
return view('Combos')->with('combos', Combos::all())
->with('products', Products::all());
}

在这种情况下,我能做些什么来发送这个列表的项目从多选作为一个字符串而不是一个数组,或者我如何在发送更新之前将它们转换为字符串?如果有人能帮助我,我将非常感激,提前感谢。

您可以使用laravel强制转换,将数组转换为JSON(字符串)并存储到数据库中,当您将从DB获取数据时,它将再次转换为数组,因此您可以使用它来显示选中的项目在multiselect

class Combos extends Model
{
/**
* The attributes that should be cast.
*
* @var array
*/
protected $casts = [
'description' => 'array',
];
}

此功能也可用于laravel 5.5

相关内容

  • 没有找到相关文章

最新更新