【问题标题】:Type error: Argument 1 passed to Illuminate\Database\Eloquent\Builder::create() must be of the type array, null given类型错误:传递给 Illuminate\Database\Eloquent\Builder::create() 的参数 1 必须是数组类型,给定 null
【发布时间】:2018-04-19 15:06:50
【问题描述】:

我正在尝试在 laravel rest api 中发布标题和文章我收到此错误

类型错误:参数 1 传递给 Illuminate\Database\Eloquent\Builder::create() 必须是类型 数组,给定空值,调用 C:\xampp\htdocs\LaravelProject\cpapi\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php 在线 1440

这是我发布文章数据的 route/api.php 文件

Route::post('articles', 'ArticleController@store');

Route::post('articles', function(Request $request) {
   return Article::create($request->all);
});

还有ArticleController.php文件的这个存储功能

 public function store(Request $request)
    {
        $article = Article::create($request->all());

        return response()->json($article, 201);
    }

这是文章模型类

class Article extends Model
{
    //new
    protected $fillable = ['title', 'body'];
}

我尝试在 articlecontroller 文件中更改它,但得到同样的错误

$article = Article::create($request->only([
            'title',
            'body']));

我该如何解决这个问题?

【问题讨论】:

  • stackoverflow.com/questions/45059864/… 的答案中,save() 方法在没有 ant 参数的情况下使用并且有效,您是否尝试在没有任何参数的情况下使用您的 create()
  • 我把它改成了这样 $data = $request->all(); $article = Article::create([ 'title' => $data['title'], 'body' => $data['body'], ]);返回响应()->json($article, 201);但我仍然遇到同样的错误
  • 谢谢@MasivuyeCokile 我解决了。

标签: php laravel-5 laravel-eloquent


【解决方案1】:

正如#Masivuye_Cokile 建议我的那样,我修改了路由和控制器功能中的代码,它解决了我的问题。

路由/api.php

Route::post('articles', function(Request $request) {
    $data = $request->all();
        return Article::create([
            'title' => $data['title'],
            'body' => $data['body'],
        ]);
});

在控制器功能中

 public function store(Request $request)
    {
       $article = Article::save();
       return response()->json($article, 201);
    }

【讨论】:

    【解决方案2】:

    我知道已经有一个公认的答案,但我认为错误的原因没有得到清楚的解释。

    如果您查看下面的代码,您会注意到在您键入时第二个路由定义存在错误; $request->all 而不是 $request->all()

    Route::post('articles', 'ArticleController@store');
    
    Route::post('articles', function(Request $request) {
       return Article::create($request->all);
    });
    

    所以,我认为更简单的解决方案是:

    Route::post('articles', 'ArticleController@store');
    
    Route::post('articles', function(Request $request) {
       return Article::create($request->all());
    });
    

    【讨论】:

      猜你喜欢
      • 2018-05-28
      • 2020-02-23
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2017-12-17
      • 2019-03-04
      • 1970-01-01
      • 2020-10-29
      相关资源
      最近更新 更多