首页 > 解决方案 > 无法在 Laravel 中发送 post 请求

问题描述

我正在尝试发送一个发布请求,它给了我这个错误。我认为错误是由控制器中的某些东西引起的,但我不知道它是什么。我已经提供了所有相关的代码。谁能帮我修复错误?

SQLSTATE [23000]:完整性约束违规:1048 列“first_name”不能为空(SQL:插入usersfirst_name、、、、、、、、 )值(? last_name, ? email, ? phone_number,?,?,password2020-02-26 updated_at07:54 created_at:56, 2020-02-26 07:54:56))

控制器:

public function store(Request $request)
    {

        $user = new User();

        $user->first_name = $request->first_name;
        $user->last_name = $request->last_name;
        $user->email = $request->email;
        $user->phone_number = $request->phone_number;
        $user->password = $request->password;

        $user->save();

        return new UserResource($user);
    }

模型:

class User extends Model
{
    protected $guarded = [];
}

用户资源:

public function toArray($request)
    {
        // return parent::toArray($request);

        return [
            'id' => $this->id,
            'first_name' => $this->first_name,
            'last_name' => $this->last_name,
            'email' => $this->email,
            'phone_number' => $this->phone_number,
            'password' => $this->password
        ];
    }
}

移民:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('phone_number');
            $table->string('password');
            $table->timestamps();
        });
    }

请求正文:

{
    'first_name': 'ayman',
    'last_name': 'tarig',
    'email': 'ayman@email.com',
    'phone_number': '010010100',
    'password': '1234'
}

标签: laravel

解决方案


首先,我认为您可以使用Eloquent ORM 中的Mass Assignment ,

来自 Laravel Eloquent ORM 文档

您也可以使用 create 方法将新模型保存在一行中。插入的模型实例将从该方法返回给您。但是,在这样做之前,您需要在模型上指定一个可填充或受保护的属性,因为所有 Eloquent 模型都默认防止批量赋值。

为了更新您的字段,您需要使用fillableEloquent 模型的数组:

class User extends Model
{
    protected $guarded = [];

    protected $fillable = [
            'id',
            'first_name',
            'last_name',
            'email',
            'phone_number',
            'password',
     ];
}

您希望使用自定义请求来验证提供的数据格式是否正确且不为空:laravel.com/docs/master/validation#form-request-validation

对于更复杂的验证场景,您可能希望创建一个“表单请求”。表单请求是包含验证逻辑的自定义请求类。

如下:

/**
 * Get the validation rules that apply to the request.
 *
 * @return array
 */
public function rules()
{
    return [
        'first_name' => 'required',
        'last_name' => 'required',
        'email' => 'required|email',
        'phone_number' => 'required',
        'password' => 'required'
    ];
}

推荐阅读