【问题标题】: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-05-28 04:04:46
【问题描述】:

我使用的是 laravel 5.4, 我需要为“createUser”打开一个端点。

“登录控制器.php”

public function createUser(Request $request)
{
    $data=$request->only('email','name','position');
    $validate=Validator::make($data, [
        'email' => 'required|email|unique:users',
        'name' => 'required',
        'position' => 'required',
    ]);

    $exUser=User::where('email','=',$request['email'])->first();
    $nameUser=User::where('name','=',$request['name'])->first();

    if(empty($exUser))
    {
        if(empty($nameUser))
        {
            $user=new User();
            $user->name=$request['name'];
            $user->email=$request['email'];
            $user->position=$request['position'];
            $user->password=hash('sha512',$request['password']);
            $user->save();
        }
        else
        {
            return response()->json(['Name Has Already Taken'],500);
        }

    }
    else
    {
        return response()->json(['Email Has Already Taken'],500);
    }
}

“RegisterController.php”

    protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'position' => $data['position'],
        'password' => bcrypt($data['password'])
    ]);
}

“api.php”

<?php

use App\User;
use Illuminate\Http\Request;

     Route::get('users',['as' => 'user', 'uses' 
     =>'Auth\LoginController@getUsers']);

    Route::post('users', ['as' => 'createUser', 'uses' => 
    'Auth\LoginController@createUser']);

“用户.php”

<?php

namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'name', 'email', 'position' ,'password'
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];
}

“邮递员详情”

获取“用户”端点正在工作! 但是当我尝试使用邮递员调用“发布”请求时,它会显示错误

"传递给 Illuminate\Database\Eloquent\Builder::create() 的参数 1 必须是数组类型,给定 null,在 C:\xamppnew\htdocs\blog\vendor\laravel\framework\src\Illuminate 中调用\Database\Eloquent\Model.php 在第 1374 行并已定义“

任何建议!

【问题讨论】:

  • 我认为您需要共享用户模型。
  • 还有邮递员的详细信息?
  • 添加了用户模型和邮递员详细信息。请检查!
  • 首先你为什么用logincontroller作为registercontroller?那你为什么不在你的createUser方法中使用User::create([...])呢?
  • 我实际上是 laravel 的新手!当我将端点写为“Route::post('users', 'RegisterController@create');”时, 也会报同样的错误

标签: laravel post login routes


【解决方案1】:

此设置对我有用。你能发布你的整个堆栈跟踪吗?我也许可以提供更具体的帮助。

api.php

Route::post('users', ['as' => 'createUser', 'uses' => 'Auth\AuthController@createUser']);

用户.php

<?php

namespace App;

class User extends \Illuminate\Foundation\Auth\User
{

}

登录控制器.php

public function createUser(Request $request)
{
    $this->validate($request, [
        'email'    => 'unique:users|email|required',
        'name'     => 'unique:users|required',
        'position' => 'required',
    ]);

    $user = new User();
    $user->name = $request['name'];
    $user->email = $request['email'];
    $user->position = $request['position'];
    $user->password = hash('sha512', $request['password']);
    $user->save();

    return response('', 201);
}

测试\功能\UserTest.php

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class UserTest extends TestCase
{
    /** @test */
    public function it_can_create_a_user()
    {
        $response = $this->post('/users', [
            'email'    => 'user' . rand(0, 99999999) . '@gmail.com',
            'name'     => 'Billy ' . rand(0, 99999999) . ' Joel',
            'position' => 'Musician',
        ], ['Accept' => 'application/json']);

        $response->assertStatus(201);
    }
}

【讨论】:

  • 添加了堆栈跟踪。那邮递员对象会被设置为json数组吗?
  • 这是完整的堆栈跟踪吗?我希望看到更多的行。是的,单元测试与邮递员测试做同样的事情。 post 方法接受 3 个参数:路由、正文和标头。
猜你喜欢
  • 2020-02-23
  • 2018-04-19
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2019-03-04
  • 1970-01-01
  • 2020-10-29
  • 1970-01-01
相关资源
最近更新 更多