Laravel - 我如何发布对象数组?

Posted

技术标签:

【中文标题】Laravel - 我如何发布对象数组?【英文标题】:Laravel - How can I post array of objects? 【发布时间】:2020-05-18 12:13:30 【问题描述】:

我有一个动态表,可以在其中添加和删除行。在每一行中,都有一些输入,用户可以在其中向对象添加数据。

现在,我将每个索引号硬编码为名称 attr。像这样:

<input type="text" name="reports[0][title]">
<input type="text" name="reports[0][description]">
<input type="text" name="reports[1][title]">
<input type="text" name="reports[1][description]">

是否可以这样做:

<input type="text" name="reports[][title]">
<input type="text" name="reports[][description]">
<input type="text" name="reports[][title]">
<input type="text" name="reports[][description]">

并像在硬编码索引时一样接收请求?

我需要将多个对象发布到控制器中的 store 方法。当我收到请求时,我希望数据是这样的,而不需要对索引进行硬编码。

"reports": [
    
        "title": "Title 1",
        "description": "Description 1"
    ,
    
        "title": "Title 2",
        "description": "Description 2"
    
]

提前致谢。

【问题讨论】:

【参考方案1】:

选项 2 是不可能的,这将导致如下结果:


 _token: "OFjlTsy3Jws9xW9H0cI9ARVGGNnQokLtRI6Tn478",
 reports: [
  
     title: "title 1"
  ,
  
     description: "description 1"
  ,
  
     title: "title 2"
  ,
  
     description: "description 2"
  ,
 ],

因此,在动态添加字段时,您需要将它们与每组的数字一起添加:

假设这是你的表单

<form action="save-reposts" method="POST">
  <!-- Your crsf token field here -->
  <input type="text" name="reports[0][title]">
  <input type="text" name="reports[0][description]">
  <input type="text" name="reports[1][title]">
  <input type="text" name="reports[1][description]">
  <input type="submit" id="submitButton" value="Submit" />
</form>
<button id="addMoreReports"> Add more </button>

使用 jQuery 可能是这样的:

let i = 2;
$('#addMoreReports').click(function()
   $('#submitButton').before(addFieldSet(i));
   i++;
);

function addFieldSet(index)
   return '<input type="text" name="reports[' + index + '][title]"><input type="text" name="reports[' + index + '][description]">';

【讨论】:

以上是关于Laravel - 我如何发布对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 如何获取数组而不是 QueryBuilder select() 语句的对象?

Laravel 集合将数组转换为对象

如何通过 Laravel 中数组中的对象保存数据

如何使用 Laravel 4.1 基于 id 或对象数组执行批量删除?

如何在laravel中搜索具有数组属性的对象数组

如何在 Laravel 中将连接结果作为对象数组获取?