Laravel 对多个插入进行验证
Laravel validation on multiple insert
我有一个体育赛事数据库 table。每个活动都有年份、活动名称和活动获胜者。
我的管理视图 table 允许按年份对事件进行分组并批量插入(通常一次插入 8 行体育赛事)。我有一个 table,用 Vue 编写,允许将最多 8 个体育赛事行添加到界面,填充和提交字段。这很有效很好。
这个方法是
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()
]);
}
}
虽然我知道这不是一个好方法(数据库结构限制了我,而不是让年份成为其中的关键和体育赛事)并且对于如此小且不常见的用例,我对性能交易感到满意关闭。
表单通过 Axios 提交到我的路线,所有内容都如我所料进入数据库。
现在我希望向该方法添加验证,确保每个事件都有事件名称和获胜者。
$validator = Validator::make($request->all(), [
'year' => 'required',
'events.*' => 'required',
]);
if ($validator->fails()) {
return response()->json([ 'errors' => $validator ]);
}
我的提交似乎绕过了我已进行的验证检查,获得了成功状态。
我的 Vue 提交方法就是这样做的
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 () {
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)
})
}
试试这个:
$validator = Validator::make($request->all(), [
'year' => 'required',
'events.*.event' => 'required',
'events.*.winner' => 'required',
]);
"getting a success status" 在你的问题文本中是什么意思?
数据进入数据库了吗,或者你只是说AJAX调用成功返回?
要使 AJAX 请求失败,请使用:
if ($validator->fails()) {
return response()
->json([ 'errors' => $validator->errors()->messages() ])
->setStatusCode(400);
}
我有一个体育赛事数据库 table。每个活动都有年份、活动名称和活动获胜者。
我的管理视图 table 允许按年份对事件进行分组并批量插入(通常一次插入 8 行体育赛事)。我有一个 table,用 Vue 编写,允许将最多 8 个体育赛事行添加到界面,填充和提交字段。这很有效很好。
这个方法是
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()
]);
}
}
虽然我知道这不是一个好方法(数据库结构限制了我,而不是让年份成为其中的关键和体育赛事)并且对于如此小且不常见的用例,我对性能交易感到满意关闭。
表单通过 Axios 提交到我的路线,所有内容都如我所料进入数据库。
现在我希望向该方法添加验证,确保每个事件都有事件名称和获胜者。
$validator = Validator::make($request->all(), [
'year' => 'required',
'events.*' => 'required',
]);
if ($validator->fails()) {
return response()->json([ 'errors' => $validator ]);
}
我的提交似乎绕过了我已进行的验证检查,获得了成功状态。
我的 Vue 提交方法就是这样做的
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 () {
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)
})
}
试试这个:
$validator = Validator::make($request->all(), [
'year' => 'required',
'events.*.event' => 'required',
'events.*.winner' => 'required',
]);
"getting a success status" 在你的问题文本中是什么意思?
数据进入数据库了吗,或者你只是说AJAX调用成功返回?
要使 AJAX 请求失败,请使用:
if ($validator->fails()) {
return response()
->json([ 'errors' => $validator->errors()->messages() ])
->setStatusCode(400);
}