为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
ITMISS 2021-12-03 14:37:35
我使用 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();}
查看完整描述

3 回答

?
慕妹3146593

TA贡献1820条经验 获得超9个赞

您应该尝试以下操作。我在小提琴中稍微调整了你的代码。不是将所有内容都推送到同一个数组中,而是将每个元素存储在一个单独的数组中。在小提琴中,您可以找到适应代码。在您的控制器中,您应该执行以下操作。您还应该删除 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--;

})


查看完整回答
反对 回复 2021-12-03
?
不负相思意

TA贡献1777条经验 获得超10个赞

使用内置的 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();

}


查看完整回答
反对 回复 2021-12-03
?
慕少森

TA贡献2019条经验 获得超9个赞

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

查看完整回答
反对 回复 2021-12-03
  • 3 回答
  • 0 关注
  • 328 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号