laravel 传递给Illuminate\Database\Eloquent\Builder::create()的参数1必须是数组类型,给定为空

1cosmwyk  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(113)

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

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);
    }
}

“注册控制器.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',
    ];
}

“ Postman 详情”x1c 0d1x
get“users”端点工作正常!但是当我尝试使用postman调用“post”请求时,它显示错误
传递给Illuminate\Database\Eloquent\Builder::create()的参数1必须是数组类型,给定空值,在第1374行的C:\xamppnew\htdocs\blog\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php中调用并定义
任何建议!

4nkexdtk

4nkexdtk1#

这个设置对我来说很有用。你能发布你的整个堆栈跟踪吗?我也许能给予更具体的帮助。
api.php

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

User.php

<?php

namespace App;

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

}

LoginController.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);
}

tests\Feature\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);
    }
}

相关问题