如何在Laravel中将输入中的大于1的值从输入插入数据库的1行中?

时间:2019-05-23 20:49:57

标签: arrays laravel forms input

我有一个像波纹管这样的表单,其中有1个以上的名称,在我的表单中输入了1个像波纹管的名字:

<form>
<input type="text" name="family">
<input type="text" name="inputCurrName[]">
<input type="text" name="inputCurrName[]">
<input type="text" name="inputCurrName[]">
<input type="submit" name="submit" value="submit">
</form>

我有一个带有2列的表,其列名称为 Family CurrName

我想在表单提交中将多个名称保存到CurrName列的一行中,例如,这是提交时的数据:

Family Input: ali inputCurrName[] Inputs : array(jack,peter,lara)

我只想在数据库中保存1条记录,其数据如下:

familyColumn Value: ali | CurrNameColumn Value: {jack,peter,lara}

我在下面使用了代码,但是它在数据库中保存了3条记录!

$input = $request->all();
for ($i = 0; $i <= count($input['inputCurrName']); $i++) {
  $user_data = [
    'family' => $input['family'],
    'curr_name' => $input['inputCurrName'][$i],
  ];

  User::Creat($user_data);
}

我该怎么办?

2 个答案:

答案 0 :(得分:1)

您正在for loop中检查inputCurrName的长度,因此它循环遍历每个inputCurrName,这就是为什么每个FamilyName获得3条记录的原因。在这种情况下,您每FamilyName只关心1条记录。

有几种方法可以将array的{​​{1}}值插入到inputCurrName的1条记录中。

从数据库中检索时,可以使用serialize()创建一个值的可存储表示,并使用unserialize()对其进行解码。

-或-

插入记录时,可以使用implode()创建以逗号分隔的列表。从数据库中检索后,使用explode()遍历每个逗号分隔的值。

-或-

如果您喜欢json,则可以使用json_encode()json_decode()进行相同操作,方法与serialize()和unserialize()相同

FamilyName

使用以下代码将为您提供上表的示例。 +------------+---------------------------------------------------------+ | FamilyName | CurrName | +------------+---------------------------------------------------------+ | Ali | a:3:{i:0;s:5:"Laura";i:1;s:6:"Peter ";i:2;s:4:"Jack";} | | Ali | Laura,Peter,Jack | +------------+---------------------------------------------------------+ curr_name_optional $user_data的一部分,展示了implode()。

array

此外,在插入数据库之前,我将确保修剪并清理表单输入数据。

答案 1 :(得分:1)

您可以简单地使用foreach,然后将数据转换为json格式,然后插入到单行中

$arr = [];
foreach($request->get('inputCurrName') as $key => $value){
   $arr[$key] => $value;
}
$user_data = [
      'family' => $request->get('family_name'),
      'curr_name' => json_encode($arr),
     ];

User::Create($user_data);

不确定其工作原理,但您似乎忘记了在表单中传递csrf-token。在@csrf标签下面添加<form>