首页 > 解决方案 > 从多个输入中获取数据

问题描述

有一个表单和多个输入。表单有一个用于添加视频的字段。我还可以动态添加一组字段。

这是看起来像表格的样子

当我将多个数据提交到一个表单时,除了视频之外的所有数据都会正确传输。

倾倒和死亡

帮助发送数组中的多个视频。这是我的控制器:

public function store(Request $request)
{         
    $path = array_map(function ($v) {return $v->store('images', 's3');}, $request->file('link_video'));
    $userId = Auth::id();
    $course = Course::where('user_id', $userId)->orderBy('created_at', 'desc')->first();

    foreach ($request->lesson_id as $key => $file) {
        $file = File::create([
            'course_id' => $course->id,
            'user_id' => $userId,
            'lesson_id' => $request->input('lesson_id')[$key],
            'lesson_name' => $request->input('lesson_name')[$key],
            'description' => $request->input('description')[$key],
            'link_video' => Storage::disk('s3')->url($path[$key]),
        ]);
    }
    File::create($file);
    return redirect()->route('teaching')->with('success', 'Курс успешно создан!');
}

这是我的表格

<form action="{{ route('store') }} " method="post" enctype="multipart/form-data">
                    @csrf
     <div class="dynamic_fields">
                            <div class="example_student">
                                <div class="table">
                                    <div class="container">
                                        <div class="bg-light text-dark">
                                        <div class="cell">
                                            <button class="js-remove pull-right btn btn-danger btn-sm">x</button>
                                        </div>
                                        <div class="cell"><div class="mb-3">
                                                <label for="lesson_id"></label>
                                                <select name="lesson_id[]" class="custom-select" id="lesson_id" >
                                                    <option value="1">@lang('main.lesson 1')</option>
                                                    <option value="2">@lang('main.lesson 2')</option>
                                                    <option value="3">@lang('main.lesson 3')</option>
                                                    <option value="4">@lang('main.lesson 4')</option>
                                                    <option value="5">@lang('main.lesson 5')</option>
                                                    <option value="6">@lang('main.lesson 6')</option>
                                                    <option value="7">@lang('main.lesson 7')</option>
                                                </select>
                                            </div></div>
                                        <div class="cell"> <div class="mb-3">
                                                <label for="lesson_name">@lang('main.lesson_name')</label>
                                                <input name="lesson_name[]" type="text" class="form-control" id="lesson_name" >
                                                <div class="invalid-feedback">
                                                    Please enter a valid name of course.
                                                </div>
                                            </div></div>
                                        <div class="cell"> <div class="mb-3">
                                                <label for="description">@lang('main.lesson_description')<span class="text-muted"></span></label>
                                                <textarea name="description[]" type="message" id="description" class="form-control" required=""></textarea>
                                            </div></div>
                                        <div class="cell"><div class="input-group mb-3">
                                                <div class="custom-file">
                                                    <input type="file" name="link_video[]" class="custom-file-input" id="link_video">
                                                    <label class="custom-file-label" for="link_video">@lang('main.choose_lesson')</label>
                                                </div>
                                            </div></div>
                                        <div class="cell"><div class="input-group mb-3">
                                                <div class="custom-file">
                                                    <input type="file" name="link_document[]" class="custom-file-input" id="link_document">
                                                    <label class="custom-file-label" for="link_document">@lang('main.choose_attachments') <span class="text-muted">(@lang('main.attachments_helper'))</span></label>
                                                </div>
                                            </div></div>

                                    </div>
                                    </div>
                                </div>
                            </div>

                            <div class="students"></div>

                            <div class="container text-center">
                                <h2 class="js-add btn btn-outline-primary">@lang('main.add_more')</h2></div>
                        </div>
 <br><button class="btn btn-primary btn-lg btn-block" type="submit">@lang('main.create_course')</button><br>
                </form>
                        <script>
        var button_add = document.querySelector('.dynamic_fields .js-add');

        button_add.addEventListener('click', function() {

            var students = document.querySelector('.dynamic_fields .students');

            var element = document.querySelector('.example_student').cloneNode(true);

            element.classList.add('student');

            element.classList.remove('example_student');


            students.appendChild(element);
        });

        document.addEventListener('click', function(el) {

            if (el.target && el.target.classList.contains('js-remove')) {

                var child = el.target.closest('.table');

                child.parentNode.removeChild(child);
            }
        });

    </script>

这是 dd($request->file());

标签: phparrayslaraveleloquent

解决方案


请分享刀片文件的代码,以便我们知道问题所在。并确保您已将 encyt 类型定义为 multipart/form... 在表单中

并建议您不需要使用 Auth::id() ,您可以像这样调用 create

 auth()->user()->files()->create($file)

并在模型 User.php 中添加一个公共函数

   public function files(){
       return $this->hasMany(File::class);
   }

在模型 File.php

  public function user(){
    return $this->belongsTo(User::class);
  }

这样,您无需在每次添加新数据时调用 Auth::id,它会自动将当前登录用户的 id 添加到您的数据的数据库中。


推荐阅读