Laravel与create()的问题

时间:2017-10-12 17:18:42

标签: laravel laravel-5.4 laravel-validation

我刚刚开始介绍一些关于Laravel的教程,我对这段代码遇到了一些麻烦:

 public function store(Request $request )
  {
        $product = $this->validate(request(), [
          'name' => 'required',
          'price' => 'required|numeric'
        ]);
        Product::create($product);
        return back()->with('success', 'Product has been added');
  }
  

参数1传递给Illuminate \ Database \ Eloquent \ Builder :: create()   必须是类型数组,null给定,调用   C:\〜\ laravel \ framework \ src \ Illuminate \ Database \ Eloquent \ Model.php on   第1374行并定义

我不知道我做错了什么,我正在逐步学习本教程

2 个答案:

答案 0 :(得分:0)

您正在将null传递给create()方法,因为您未在此处获取请求对象

public function store(Request $request )
{
     $this->validate($request, [
          'name' => 'required',
          'price' => 'required|numeric'
   ]);
        Product::create($request->all());
        return back()->with('success', 'Product has been added');
}

<强>替代

我建议您Laravel 5.4的方式就像这样

public function store(Request $request )
{
      $validator = Validator::make( $request->all(), [
          'name' => 'required',
          'price' => 'required|numeric'
    ] );
   if ( $validator->fails() ) {
    //error handling
    }

    Product::create($product);
    return back()->with('success', 'Product has been added');
}

适用于Laravel 5.5

正如在聊天中所提到的,你正在寻找将Laravel更新为5.5 for Laravel 5.5这是一个稳定版本,我找到了一篇很好的文章here,我在几个月前读过,他们已经描述了一个laravel验证。体面的方式,它将帮助您了解更多。

答案 1 :(得分:0)

首先使用$product->fails()检查您的验证结果:

然后使用Product::create($request>all())

在命名空间部分use Validator;

之后将其添加到Controller文件的顶部

然后:

$product = Validator::make($request->all(),[
    'name' => 'required',
    'price' => 'required|numeric'
]);
if (!$product->fails()){
    Product::create(request()->all());
};
祝你好运。