在Laravel 5.6中存储数组

时间:2018-08-23 08:31:01

标签: arrays laravel

我必须从输入中跟随数组

array:9 [
  "columns" => "4"
  "device_id" => array:4 [
    0 => "1"
    1 => "2"
    2 => "3"
    3 => "4"
  ]
  "hub_id" => "11"
  "usage" => array:4 [
    0 => "1"
    1 => "2"
    2 => "3"
    3 => "4"
  ]
   ....

在我的 foreach 循环中,我仅返回一个值,而不是全部

$devices = $request->all();    
foreach ($devices["device_id"] as $device) {
           dd($device);
}

这只会返回 1 一个值,而不是全部。

我无法显示所有值并将其保存到数据库。 女巫会是快速正确的方法吗?

2 个答案:

答案 0 :(得分:1)

数组和您得到的行为是正常的。

$devices = $request->all();    
foreach ($devices["device_id"] as $device) {
           dd($device);
}

这确实将返回1,因为您的光标位于$devices["device_id"]的第一个值。如果您等待下一次迭代,它将是2,然后是34

请记住,您也可以这样编写foreach:

foreach ($devices["device_id"] as $index => $device)

,其中$index等于与当前值相关的索引。

如果需要所有值,则只需dd($devices["device_id"]),它将返回以下数组:

array:4 [
    0 => "1"
    1 => "2"
    2 => "3"
    3 => "4"
 ]

答案 1 :(得分:1)

您不将数组保存在数据库中。数据库不应保存多维结构,因为它们不支持多维结构。

您必须将数组转换为数据库能够保存的格式,例如JSON或PHP序列化。如果您以后不必再轻易地搜索数据,以这种方式保存数据实际上是很常见的。

尽管如此,我还是会在您的模型中使用setter来实现:

public function setAttributeNameAttribute($values)
{
    $this->attributes['attribute_name'] = json_encode($values);
}

public function getAttributeNameAttribute($values)
{
    return json_decode($values);
}