【问题标题】:Laravel issue with create()Laravel 的 create() 问题
【发布时间】:2018-03-24 17:37:45
【问题描述】:

我刚刚开始了一些关于 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 行并定义

我不知道我做错了什么,我正在一步一步地学习这个教程

【问题讨论】:

  • 在您的代码中,$product 是验证操作的结果,而不是产品。你可能想要Product::create(request()->all()) 之类的东西。
  • 它有效,但我还需要验证
  • 你有验证。 $this->validate 如果失败会抛出异常。

标签: laravel laravel-5.4 laravel-validation


【解决方案1】:

您将 null 传递给 create()method 因为您没有在此处获取请求对象,请尝试这种方式

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 以用于 Laravel 5.5 的稳定版本,我发现了一篇很好的文章 here,我在几个月前读过,他们以体面的方式描述了 laravel 验证它将帮助您更多地了解它。

【讨论】:

  • (1/1) FatalErrorException 语法错误,ProductController.php 中的意外 '->' (T_OBJECT_OPERATOR)(第 41 行)
  • 对不起,我在这里打错了检查更新的答案,我还附上了一篇文章以获得更好的见解
  • 感谢您的文章,但代码也不起作用(1/1) BadMethodCallException 方法验证不存在。
  • 5.4.36 有人建议编辑我的帖子并添加了这些标签抱歉
  • 好的等等我正在重写我已经根据 laravel-5.5 回答的答案
猜你喜欢
  • 1970-01-01
  • 2023-02-17
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 2015-11-29
  • 2020-09-20
  • 1970-01-01
  • 2021-12-28
相关资源
最近更新 更多