Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 5.4-插入重复行_Php_Laravel - Fatal编程技术网

Php 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"

我已经使用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">
<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',
                    ]);
        }
}