laravel 批量插入数据,后台该如何校验?

  1. 比如说前台传递过来一个json数组,里面每一个条目都是一条数据,在这种情况下改如何处理呢?
<?php

namespace App\Http\Requests;

use App\User;
use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Support\Facades\Auth;

class StoreEvaluateStudentCourseRecordPost extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            // 保存评价记录验证
            '*.type' => 'required',
            '*.class_id' => 'required|integer',
            '*.course_id' => 'required|integer',
            '*.student_id' => 'required|integer',
            '*.quota_id' => 'required|integer',
            '*.evaluate_data' => 'required|max:191',
        ];
    }

    /**
     * 配置验证器实例。
     *
     * @param  \Illuminate\Validation\Validator  $validator
     * @return void
     */
    public function withValidator($validator)
    {

        /**
         * 目前只有一个评价记录模板,每提交一种类型的评价需要新建一张表存储,由于评价类型传递字段的不可控性,我采取每一种评价类型建一张表的方式
         * 验证:
         * student_course 老师对学生课程指标评价 对应的是evaluate_student_course_records 表
         */
        $validator->after(function ($validator) {
            $infos = $validator->getData();
            if(!empty($infos) && isset($infos[0]) && is_array($infos[0])){ // 多维数组上传
                foreach ($infos as $info){
                    if(!empty($info['type']) && $info['type'] == 'student_course' && !empty($info['class_id']) && !empty($info['course_id']) && !empty($info['student_id'])
                        && !empty($info['quota_id']) && !empty($info['evaluate_data'])
                    ){
                        if(User::hasQuota(Auth::id(), $info['class_id'], $info['course_id'], $info['quota_id'])){
                            return true;
                        }
                    }
                }
            }

            $this->failedValidation($validator); // 让校验失败
        });
    }


//    public function validator(ValidationFactory $factory)
//    {
//        $data = $this->validationData();
//        if(!empty($data) && is_array($data)){
//            foreach ($data as $d ){
//                $instance = $factory->make(
//                    $d, $this->container->call([$this, 'rules']),
//                    $this->messages(), $this->attributes()
//                );
//                if (method_exists($this, 'withValidator')) {
//                    $this->withValidator($instance);
//                }
//                $instance->validate();
//            }
//        }
//    }
}
陪伴而非守候
浏览 524回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP