猿问

从多个动态字段在数据库中插入一个二维数组 - Laravel

我使用 Laravel 创建了一个表单,可以在其中使用 jQuery 添加和删除动态输入字段。


我现在试图将数据插入到数据库中,在那里我遇到了一个问题。我的数据库存在两个表;任务和问题。“问题”表链接到任务表 bij task_id。这个 task_id 也应该发送到数据库,但我无法得到它,赖特。请参阅下面的我的代码。


谢谢您的帮助。


问题控制器.php

第一种方法有效,但我的任务 ID 为“null”。从所有字段插入所有记录。

第二种方法只添加1个字段的数据,但添加了正确的id。

public function store(Request $request, Issue $issue, Task $task)

 {

    ## First method

    // foreach($request->issueInfo as $key => $value) {

    //     Issue::create($value);

    // }

    ## Second method

    foreach ($request->issueInfo as $key => $name) {

        dd($name);

        $names[] = [

            'task_id'    => $task->id,

            'issue_name' => $name,

            'issue_time' => $name,

            'issue_date' => $name,

            'issue_type' => $name,

        ];

    }

    Issue::insert($names);

    return back();

}


ITMISS
浏览 329回答 3
3回答

慕妹3146593

您应该尝试以下操作。我在小提琴中稍微调整了你的代码。不是将所有内容都推送到同一个数组中,而是将每个元素存储在一个单独的数组中。在小提琴中,您可以找到适应代码。在您的控制器中,您应该执行以下操作。您还应该删除 Issue $issue 因为您没有使用它。 public function store(Request $request, Task $task)    {        //        foreach ($request->issue_name as $index  => $name) {            $task->issues()->create([                'issue_name' => $name,                'issue_time' => $request->issue_time[$index],                'issue_date' => $request->issue_date[$index],                'issue_type' => $request->issue_type[$index]            ]);        }        return back();    }使用删除按钮解决您的问题。添加到您的班级行,例如“删除此字段”。并调整您的 javascript 代码以删除字段:$('#dynamicFields').on('click', '.remove-fields', function(){   $('.remov-this-field').remove(); i--;})

不负相思意

使用内置的 Eloquent 方法对您有利。首先,定义关系:class Task{    public function issues()    {        return $this->hasMany(Issues::class);    }{class Issue{    public function task()    {        return $this->belongsTo(Task::class);    }{接下来写一个好帮手的方法。请注意,该create()方法已经接受了一个数组输入,因此您不必foreach遍历所有数组键:class Task{    ...    public function addIssue($issue)    {        return $this->issues()->create($issue);    }}可以简化控制器逻辑,这是进行一些服务器端验证的好机会:public function store(Request $request, Task $task){    $attributes = request()->validate([        // issue validation rules here    ]);    $task->addIssue($attributes);    return back();}

慕少森

您可以尝试在表单中添加隐藏字段,您应该将该字段的值设置为 task_id,然后在您提交表单时将其传递给 Controller。我认为在那之后你的第一种方法应该可以正常工作。
随时随地看视频慕课网APP
我要回答