Laravel - 将多个数组作为新行插入?

Posted

技术标签:

【中文标题】Laravel - 将多个数组作为新行插入?【英文标题】:Laravel - Insert multiple arrays as new rows? 【发布时间】:2021-12-12 10:35:14 【问题描述】:

下面给出的我的代码只向表中插入一行。对于$courseChapterschapter_content 数组中的每一组数据,我希望它作为CoursePublishChaptercontent 表中的新行添加,courseIdpoints 字段的值对于此类数据的每一新行重复。对于示例,需要将 预期输出 中给出的 2 行新数据插入到表中,以用于下面给定的 var_export($courseChapters) 数据。有人可以告诉我如何实现这一目标吗?

foreach ($courseChapters['chapter_content'] as $chapter) 
     $postdata['chapterId']    =  $chapter['course_chapter_id'];
     $postdata['contentTypeId'] = $chapter['content_type_id'];
     $postdata['fileId']         = $chapter['file_id'];
                 
   $data=CoursePublishChaptercontent::create([
         'courseId' => $courseChapters['courseId'],
         'points'    =>  $courseChapters['points'],
         'course_chapter_id'=>$postdata['chapterId'],
         'content_type_id'=>$postdata['contentTypeId'],
         'file_id'=>$postdata['fileId']]);
 

var_export($courseChapters) 是一个数组,如下所示:

array (
  'id' => 4,
  'courseId' => 24,
  'points' => 8,
  'chapter_content' => 
  array (
    0 => 
        array (
          'course_chapter_id' => 4,
          'file_id' => 3,
          'content_type_id' => 1,
        ),
    1 => 
        array (
          'course_chapter_id' => 4,
          'file_id' => 4,
          'content_type_id' => 2,
        ),
  ),
)

编辑

//$postdata=[];
                   $i=0;
                   foreach ($courseChapters['chapter_content'] as $chapter) 
                    $postdata[$i]['courseId'] = $courseChapters['courseId'];
                    $postdata[$i]['points']    =  $courseChapters['points'];
                    $postdata[$i]['course_chapter_id']    =  $chapter['course_chapter_id'];
                    $postdata[$i]['content_type_id'] = $chapter['content_type_id'];
                    $postdata[$i]['file_id']         = $chapter['file_id'];                              
                    $i++;
                
         $data=CoursePublishChaptercontent::create($postdata);

预期/要求的输出

[
  "courseId" => 24
  "points" => 8
  "course_chapter_id" => 4
  "content_type_id" => 1
  "file_id" => 3
],
[
  "courseId" => 24
  "points" => 8
  "course_chapter_id" => 4
  "content_type_id" => 2
  "file_id" => 4
]

当前输出

array:2 [
  0 => array:5 [
    "courseId" => 24
    "points" => 8
    "course_chapter_id" => 4
    "content_type_id" => 1
    "file_id" => 1
  ]
  1 => array:5 [
    "courseId" => 24
    "points" => 8
    "course_chapter_id" => 4
    "content_type_id" => 1
    "file_id" => 3
  ]
]

【问题讨论】:

【参考方案1】:

您的$courseChapters 数组仅包含一个对象,因此只插入了 1 个数据。如果您仍想保持 $courseChapters 的数组格式为这样,此代码将起作用:

foreach ($courseChapters as $courseChapter) 
   $courseId = $courseChapter["courseId"];
   $points = $courseChapter["point"]
   foreach ($courseChapter["chapter_content"] as $chapterContent) 
      $courseChapterId = $chapterContent["course_chapter_id"];
      $fileId = $chapterContent["file_id"];
      $contentTypeId = $chapterContent["content_type_id"];
      
      // Then put your create code below using the data provided above...
   

就个人而言,我会反对这一点,因为那里有一个嵌套循环,我建议将您的 $courseChapters 的数组格式更改为与您的预期输出完全相同,因此,您只需要一个循环来插入记录.

这是我提到的格式(如果你手动创建它):

array (
   array (
     'id' => 4,
     'courseId' => 24,
     'points' => 8,
     'course_chapter_id' => 4,
     'file_id' => 3,
     'content_type_id' => 1
   ),
   array(
     'id' => 4,
     'courseId' => 24,
     'points' => 8,
     'course_chapter_id' => 4,
     'file_id' => 4,
     'content_type_id' => 2
   )
);

上面的格式是这样的:

[
   [
      "id" => 4,
      "courseId" => 24,
      "points" => 8,
      "course_chapter_id" => 4,
      "file_id" => 3,
      "content_type_id" => 1
   ],
   [
      "id" => 4,
      "courseId" => 24,
      "points" => 8,
      "course_chapter_id" => 4,
      "file_id" => 4,
      "content_type_id" => 2
   ]
]

【讨论】:

您能告诉我如何将$courseChapters 的数组格式更改为与您要求的输出完全相同的预期输出 这取决于您的前端发送数据,我假设$courseChapters 数组是您的前端发送到后端的数据。我只能添加我说的格式,会尽快更新答案。 我在问你如何将$courseChapters 数组更改为与我的预期输出完全相同 这个答案给出了错误Illegal string offset 'courseId' 只需将代码中数组的键属性与您提供的数组的键属性重新对齐即可。我用您提供的信息检查了我的代码,它匹配。检查你的。

以上是关于Laravel - 将多个数组作为新行插入?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel插入或更新数组,多行

在 laravel 中通过 ajax 提交简单的表单,之后,将新行插入到现有表中,其中包含来自提交表单的数据

Laravel 从 textarea 获取每一行并插入数据库中的新行

Swift 4 - 将新行从数组插入到只有一个静态行的部分

仅当一个字段作为数组提供时,Laravel Eloquent 才插入多条记录

在laravel中将多个数据插入数据库