首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5-存储在2d阵列中的数据

Laravel 5-存储在2d阵列中的数据
EN

Stack Overflow用户
提问于 2016-02-10 11:27:01
回答 1查看 847关注 0票数 1

我有一个采用以下结构的表单

代码语言:javascript
复制
<tr id='actionRow'>
    <td>
        <input type="text" name='actionInput[0][]' id="actionInput"  placeholder='Action' class="form-control"/>
    </td>
    <td>
        <select class="responsibility" name="actionInput[1][]" id="responsibilityInput">
            <option value=""></option>
            @foreach($users as $user)
                <option value="{{ $user->userName }}">{{ $user->userName }}</option>
            @endforeach
        </select>
    </td>
    <td>
        <input type="text" name='actionInput[2][]' id="dateInput" placeholder='Completion Date' class="form-control dateControl"/>
    </td>
</tr>

我有一个选项供用户向此表单添加行,它基本上克隆了表行。输出actionInput时在控制器中得到的最终结果如下所示

代码语言:javascript
复制
array:3 [▼
  0 => array:3 [▼
    0 => "Action Input 1"
    1 => "Action Input 2"
    2 => "Action Input 3"
  ]
  1 => array:3 [▼
    0 => "Responsibility Input 1"
    1 => "Responsibility Input 2"
    2 => "Responsibility Input 3"
  ]
  2 => array:3 [▼
    0 => "Date Input 1"
    1 => "Date Input 2"
    2 => "Date Input 3"
  ]
]

当将此数据添加到我的数据库表中时,表行应该包含来自每个数组的一位数据。因此,如果我获取上述数据并将其插入数据库,表行应该如下所示

代码语言:javascript
复制
Action  |  Responsibility   | Date
-------------------------------------
Input 1 |  Responsibility 1 | Date 1
-------------------------------------
Input 2 |  Responsibility 2 | Date 2
-------------------------------------
Input 3 |  Responsibility 3 | Date 3
-------------------------------------

在我的控制器里,我正在做这件事

代码语言:javascript
复制
$actions = Input::get('actionInput');

foreach($actions as $action => $category) {
    $contactReportActions = new ContactReportActionsDoc();
    $contactReportActions->contactReportId = $contactReport->id;
    foreach($category as $key => $value){
        $contactReportActions->action = $value;
        $contactReportActions->responsibility = $value;
        $contactReportActions->deliveryDate = $value;
    }
    $contactReportActions->save();
}

问题是,这会产生类似于

代码语言:javascript
复制
Action           |  Responsibility   | Date
----------------------------------------------------------
Input 1          |  Input 2          | Input 3
----------------------------------------------------------
Responsibility 1 |  Responsibility 2 | Responsibility 3
----------------------------------------------------------
Date 1           |  Date 2           | Date 3
----------------------------------------------------------

那么,我如何在我的控制器内纠正这个问题,这样它才能正确地将数据输入我的数据库?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 11:48:52

我会这样做:

代码语言:javascript
复制
<tr id='actionRow'>
    <td>
        <input type="text" name="actionInput[{{$key}}]['action']" id="actionInput"  placeholder='Action' class="form-control"/>
    </td>
    <td>
        <select class="responsibility" name="actionInput[{{$key}}]['responsibility']" id="responsibilityInput">
            <option value=""></option>
            @foreach($users as $user)
                <option value="{{ $user->userName }}">{{ $user->userName }}</option>
            @endforeach
        </select>
    </td>
    <td>
        <input type="text" name="actionInput[{{$key}}]['date_input']" id="dateInput" placeholder='Completion Date' class="form-control dateControl"/>
    </td>
</tr>

在视图中,您应该为数组生成一个随机的或顺序的键,并用它们的名称存储表的列。对于以后克隆的每一行,都会生成另一个键。

如果需要,此布局还将允许更容易地编辑实体。

然后,在Controller中,可以像这样将每个实体属性分隔开来:

代码语言:javascript
复制
    foreach (\Input::get('actionInput', array()) as $entityData)
    {
        $entity = ContactReportAction::find($entityData["id"]) ?: new ContactReportAction;
        $entity->fill($entityData);
        $entity->save();
    }

看看这个对你有没有帮助..。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35313917

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档