大家好,我的刀片中有一个输入字段,是一个数组。
<div class="form-group">
<div class="input_fields_wrap">
<label for="dependents">Dependents</label>
<button class="add_field_button btn btn-sm">+</button>
<input type="text" name="dependents[]" class="form-control input-sm">
</div>
</div>
我希望将其保存为每个字符串用逗号分隔的长字符串。并且在我的数据库中将其保存为dependents。有可能吗?
答案 0 :(得分:2)
是的,可能。当inserting
到数据库时使用implode()。
$dependents = implode(',', $request->input('dependents'));
从retrieving
数据库到array
时使用explode()。
$dependents[] = explode(',', $db_items->dependents);
答案 1 :(得分:1)
是的,您可以在implode
$data = implode(',',$dataArray);
但我建议您使用 serialize()
$data = serialize($dataArray);
并获得实际数组,您可以使用
unserialize($data); // $data should be serialize
当您使用带键的关联/多维数组
时,您的工作量会减少答案 2 :(得分:1)
如上所述,你可以内爆/爆炸。
一般来说,以这种方式保存数据几乎不可能进行搜索。通常最好将它保存在一个单独的表中,因为它本质上是一个多对一的关系。这取决于你自己决定,但我不会这样做只是为了“偷工减料”,因为计数和分组之类的东西会受到影响,因为索引这样的字段提供的性能比单独的表少得多。
那就是说,我的一个建议就是像这样在正面和背面添加删除器:
,1,2,12,13,145,
你问为什么。因为考虑这个查询
SELECT * FROM table WHERE field LIKE '%1%'
现在,如果该列表为field
,则它将匹配任何位置1
的任何行。这可能不是你想要的。比如匹配23,215,54
。因此,简单的解决方案是将分隔符添加到正面和背面以及查询,就像这样。
SELECT * FROM table WHERE field LIKE '%,1,%'
现在我们只将字段与,1,
匹配,因为我们可以在搜索中包含分隔符。很明显,,1,
与215
不同。
您必须认真考虑如何使用此数据,因为您将仅使用Like %data%
匹配的查询进行搜索和分组。
您可以通过以下方式添加它们:
$var = ','.implode(',', $arr).',';
如果您选择使用它们,那么有一些简单的方法可以删除这些额外的分隔符:
$var = trim($var,',');
//then we would explode it
$arr = explode(',', $var);
您甚至可以使用
在SQL中正确执行此操作SELECT TRIM(BOTH ',' FROM field ) AS trimmed;
我会谨慎选择分隔符,如果数据中有,
可能会选择类似|
的内容,并确保从输入数据中删除分隔符,否则你可能永远无法在将来正确分离数据。
当我使用具有物化路径模式的树数据时,我通常使用此方法,但这是另一个时间的故事......