如何创建包含多个实体数据的表单?

时间:2018-06-14 15:14:32

标签: laravel forms html-table

我一直试图想出以单一形式为多个实体提交数据的最佳方式。

我的用例是我有一个包含多行不同实体的表。我希望能够进入“编辑”状态。查看某些列将成为文本字段并允许更改值的位置。

实施例

Type   | Name  | Age
Animal | Eevee | 4
Animal | Sandy | 7
Human  | Bob   | 24

[Submit]

在编辑模式下,他们可以更改任何实体的年龄。当用户点击整个列表的保存按钮时,我希望表单提交所有更改。问题是在更新方法中,我需要知道哪些实体要更新哪些值

我在考虑使用name属性在输入

上存储每个实体的实体ID
<input name="{{$entity->id}} value="{{$entity->age}}"></input>

但是动物和人类存储在不同的数据库表中。所以在控制器的更新方法中,我必须取名称(这将是实体的id),如果它作为人类存在

entityToUpdate = Human::find(id)

如果entityToUpdate不存在

entityToUpdate = Animal::find(id)

我们在数据库中使用UUID,这样可行,但感觉不对。

有没有办法将表格中的几个输入组合在一起?

group1
    type=animal
    id = (Sandys ID)
    age = 8
group2
    type=human
    id =(bobs ID)
    age = 25

1 个答案:

答案 0 :(得分:2)

您可以在输入名称中使用array notation,以便在服务器端获得所需内容:

@foreach($entities as $entity)
   <input type="hidden" name="group[{{$loop->index}}][type]" value="{{$entity->type}}"/>
   <input type="hidden" name="group[{{$loop->index}}][id] value="{{$entity->id}}"/>
   <input type="text" name="group[{{$loop->index}}][age] value="{{$entity->age}}"/>
@endforeach

然后在服务器端:

foreach(request()->get('group') as $entity) {
    // $entity contains ['id'], ['type'], ['age']
}