将阵列输入字段保存为laravel中的长字符串

时间:2018-01-18 06:50:08

标签: php laravel laravel-5 laravel-5.5

大家好,我的刀片中有一个输入字段,是一个数组。

            <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。有可能吗?

3 个答案:

答案 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 

当您使用带键的关联/多维数组

时,您的工作量会减少

Serialize or Implode

答案 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;

我会谨慎选择分隔符,如果数据中有,可能会选择类似|的内容,并确保从输入数据中删除分隔符,否则你可能永远无法在将来正确分离数据。

当我使用具有物化路径模式的树数据时,我通常使用此方法,但这是另一个时间的故事......