如何在Laravel中将数组存储到数据库中?

3
我将数据存储到数组array[]中,当我执行dd(($request))时,可以看到包含数据的数组。
问题是如何将它存储到数据库中? blade
<div class="form-group">
                    <label for="qualifiche">qualifiche:</label>
                    <input type="checkbox" name="array[]" value="uno" > Uno <br>
                    <input type="checkbox" name="array[]" value="due"> Due <br>
                    <input type="checkbox" name="array[]" value="tre"> Tre <br>
                </div>

为什么所有的输入都有相同的名称?这样你只能获取其中一个。 - Mahdi Younesi
@Itisallyours 因为它是一个数组。 - Matteo
1
使用 serialize($request->input('array')) 存储数据,使用 unserialize($model->field_name) 恢复数据。 - H H
@Itisallyours 我想把数组[data]存储到数据库中(varchar)。 - Matteo
你也可以使用 $casts 来进行序列化/反序列化:https://laravel.com/docs/5.6/eloquent-mutators#array-and-json-casting 只需要将字段类型设置为 TEXTJSON,并按照文档中所示添加字段到 $casts 数组即可。 - H H
显示剩余4条评论
1个回答

8
您有两个主要选择:
选项1: 首先将数组序列化并保存:
$arr = serialize($request['array']);

那么当您检索数据时,可以执行以下操作: // $model->attribute将被替换为您的模型名称和属性 $data = unserialize($model->attribute);
这里是文档:http://us.php.net/manual/en/function.serialize.php 选项2: 手动从数组构建字符串并将其保存为字符串: // !! 是分隔符,您可以使用任何想要的... $data = implode('!!', $request['array]);
然后,您可以使用以下方法获得数组:
$array = explode('!!', $model->attribute);

对于Laravel:

您可以编写一个getter方法,以便在不手动执行的情况下将数据作为数组获取:

public function getSomethingAttribute($value)
{
    // if using serialize
    return unserialize($value);
    // or if using implode
    return explode('!!', $value)

}

附加内容:

如果数据库字段设置为 JSON 或 Text,您也可以将其存储为 JSON… 如果是这种情况,请解析数组并保存它。


我可以在“创建”内部或外部添加选项1。 - Matteo
@Matteo 无论你喜欢哪种方式:Model::create(['attribute' => serialize($request['array']) .... ]) 或者 $data = $request['array']; 然后使用 $data 创建。 - Sletheren

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接