首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个插入的Laravel验证

多个插入的Laravel验证
EN

Stack Overflow用户
提问于 2017-08-11 19:31:05
回答 1查看 949关注 0票数 0

我有一张分贝的体育赛事表。每个事件都有一个年份、事件名称和一个事件获胜者。

我对这个表的管理视图允许将事件按年分组并大量插入(通常一次插入8行体育赛事)。我有一个表,用Vue编写,它允许将多达8行的体育赛事添加到界面中,填充和提交字段。这个效果很好。

这个方法是

代码语言:javascript
复制
public function storeMultiple(Request $request)
    {

        $year = $request->year;
        $newEvents = $request->events;

        foreach ($newEvents as $key => $value) {
            DB::table('sport_events')->insert([
                'team_id' => 1,
                'sort_order' => $value['sort_order'],
                'year' => $year,
                'event' => $value['event'],
                'winner' => $value['winner'],
                'created_at' => Carbon::now(),
                'updated_at' => Carbon::now()
            ]);
        }

    } 

虽然我知道这不是一种很好的方法( db结构限制了我,而不是让它成为关键和体育活动),对于这样一个小的和不常见的用例,我对性能权衡很满意。

该表单是通过Axios提交给我的路线的,一切都如我所期望的那样在数据库中落地。

现在,我希望向该方法添加验证,确保每个事件都有事件名称和获胜者。

代码语言:javascript
复制
$validator = Validator::make($request->all(), [
            'year' => 'required',
            'events.*' => 'required',
        ]);

        if ($validator->fails()) {
            return response()->json([ 'errors' => $validator ]);
        }

看来,我的提交绕过了我已经准备好的验证检查,获得了成功的状态。

我的Vue提交方法是这样做的

代码语言:javascript
复制
submit () {
                axios({
                    method: 'post',
                    url: '/admin/sports',
                    data: {
                        year: this.year,
                        sports: this.sports
                    }
                }).then((response) => {
            window.location.href = '/admin/sports'

                }).catch((error) => {
                    // error
                })
            }

这种方法哪里出错了?

更新:Thiago的建议解决了一些问题,但随后我不得不更新Vue组件中的submit方法,以获得要显示的错误

代码语言:javascript
复制
submit () {
                axios({
                    method: 'post',
                    url: '/admin/sports',
                    data: {
                        year: this.year,
                        sports: this.sports
                    }
                }).then((response) => {
                    window.location.href = '/admin/sports'
                }).catch((error) => {
                    this.errors = error.response.data.errors
                    console.log(this.errors)
                })
            }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-11 21:11:27

试试这个:

代码语言:javascript
复制
$validator = Validator::make($request->all(), [
    'year' => 'required',
    'events.*.event' => 'required',
    'events.*.winner' => 'required',
]);

在你的问题课文中,“获得成功”是什么意思?

数据是进入DB,还是仅仅意味着AJAX调用成功返回?

若要使AJAX请求失败,请使用:

代码语言:javascript
复制
if ($validator->fails()) {
    return response()
        ->json([ 'errors' => $validator->errors()->messages() ])
        ->setStatusCode(400);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45642553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档