Php Laravel 5.4-插入重复行
我已经使用Laravel好几年了,这个问题让我很困惑。将Laravel 5.4与旅行者一起使用。我在面包控制器外有自己的控制器 表格:Php Laravel 5.4-插入重复行,php,laravel,Php,Laravel,我已经使用Laravel好几年了,这个问题让我很困惑。将Laravel 5.4与旅行者一起使用。我在面包控制器外有自己的控制器 表格: <form method="POST" action="/admin/invites" accept-charset="UTF-8" class="form-edit-add"> <input name="_token" type="hidden" value="QgLgj5tG4RfD2CxCsqE2Qn5jcWfwQhsk5THT30vO"
<form method="POST" action="/admin/invites" accept-charset="UTF-8" class="form-edit-add">
<input name="_token" type="hidden" value="QgLgj5tG4RfD2CxCsqE2Qn5jcWfwQhsk5THT30vO">
<div class="panel-body">
<div class="form-group">
<label for="name">Business</label>
<input class="form-control" placeholder="Business Name" name="business_id" type="text">
</div>
<div class="form-group">
<label for="body">Referral Name</label>
<input class="form-control" placeholder="Referral Name" name="referral_name" type="text">
</div>
</div>
<input class="btn btn-primary width-100 mb-xs" type="submit" value="Save">
</form>
控制器:
public function store(Requests\InviteRequest $request)
{
DB::table('invites')->insert(
[
'user_id' => Auth::user()->id,
'business_id' => $request->business_id,
'referral_name' => $request->referral_name,
'url_token' => str_random(16)
]
);
return redirect('/admin/invites')->with([
'message' => "Successfully Added New",
'alert-type' => 'success',
]);
}
当我提交时,它会在数据库中创建2行。我没有重复的路由或控制器。我的请求文件是空的。我在表中有一个ID,它与主索引一起自动递增
有什么想法或疑难解答提示吗?您的表单有一些问题:
<label for="name">Business</label>
<input class="form-control" placeholder="Business Name" name="business_id" type="text">
将的标签更改为的标签
将存储
方法更改为:
public function store(Requests\InviteRequest $request) {
$this->validate($request, array(
'user_id' => 'required',
'business_id' => 'required',
'referral_name' => 'required',
));
DB::table('invites')->insert([
'user_id' => $request->user_id,
'business_id' => $request->business_id,
'referral_name' => $request->referral_name,
'url_token' => str_random(16),
// If you don't use timestamp delete these lines below
'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
]);
return redirect('/admin/invites')->with([
'message' => "Successfully Added New",
'alert-type' => 'success',
]);
}
看看它是否有效。我认为您在这里缺少的主要一点是,Voyager调用了它的
store()
两次。首先,通过AJAX验证字段,然后再通过普通表单submit将面包存储到数据库中
查看Voyager中的默认store()
实现:
public function store(Request $request)
{
$slug = $this->getSlug($request);
$dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();
// Check permission
Voyager::canOrFail('add_'.$dataType->name);
//Validate fields with ajax
$val = $this->validateBread($request->all(), $dataType->addRows);
if ($val->fails()) {
return response()->json(['errors' => $val->messages()]);
}
if (!$request->ajax()) {
$data = $this->insertUpdateData($request, $slug, $dataType->addRows, new $dataType->model_name());
return redirect()
->route("voyager.{$dataType->slug}.edit", ['id' => $data->id])
->with([
'message' => "Successfully Added New {$dataType->display_name_singular}",
'alert-type' => 'success',
]);
}
}
注意if(!$request->ajax())
条件,第一个ajax调用将绕过该条件,但第二个调用将进入该条件并存储到数据库中
因此,简而言之,您必须在
store()
方法中遵循相同的结构。首先执行验证。然后在需要保存时,将代码放入if(!$request->ajax())
condition.您是否使用过雄辩的方法尝试使用模型this@AjayDeepakKumar是。Invite::insert…
相同的结果尝试调试$request->all()
它返回正确的数组,只有一个条目如果不返回redirect(),是否仍会得到两个条目
?成功了!最好将此添加到文档中
public function store(Requests\InviteRequest $request) {
$this->validate($request, array(
'user_id' => 'required',
'business_id' => 'required',
'referral_name' => 'required',
));
DB::table('invites')->insert([
'user_id' => $request->user_id,
'business_id' => $request->business_id,
'referral_name' => $request->referral_name,
'url_token' => str_random(16),
// If you don't use timestamp delete these lines below
'created_at' => Carbon::now()->format('Y-m-d H:i:s'),
'updated_at' => Carbon::now()->format('Y-m-d H:i:s'),
]);
return redirect('/admin/invites')->with([
'message' => "Successfully Added New",
'alert-type' => 'success',
]);
}
public function store(Request $request)
{
$slug = $this->getSlug($request);
$dataType = Voyager::model('DataType')->where('slug', '=', $slug)->first();
// Check permission
Voyager::canOrFail('add_'.$dataType->name);
//Validate fields with ajax
$val = $this->validateBread($request->all(), $dataType->addRows);
if ($val->fails()) {
return response()->json(['errors' => $val->messages()]);
}
if (!$request->ajax()) {
$data = $this->insertUpdateData($request, $slug, $dataType->addRows, new $dataType->model_name());
return redirect()
->route("voyager.{$dataType->slug}.edit", ['id' => $data->id])
->with([
'message' => "Successfully Added New {$dataType->display_name_singular}",
'alert-type' => 'success',
]);
}
}