无法在Laravel中发送发布请求

时间:2020-02-26 08:02:07

标签: laravel

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

SQLSTATE [23000]:违反完整性约束:1048列 “ first_name”不能为空(SQL:插入usersfirst_name中, last_nameemailphone_numberpasswordupdated_atcreated_at)值(?,?,?,?,?,2020-02-26 07:54: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 = [];
}

UserResource:

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'
}

3 个答案:

答案 0 :(得分:1)

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

来自Laravel雄辩的ORM文档

您还可以使用create方法将新模型保存在一行中。插入的模型实例将从该方法返回给您。但是,在执行此操作之前,您将需要在模型上指定可填充或受保护的属性,因为默认情况下,所有Eloquent模型都可以防止大规模分配。

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

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'
    ];
}

答案 1 :(得分:0)

如果通过html表单发出此请求,请确保正确拼写的每个输入的名称。如果您使用的是邮递员,请确保已发送了发帖请求,因为一切都很好。

答案 2 :(得分:0)

确保您导入Illuminate \ Http \ Request

use Illuminate\Http\Request;

然后使用邮递员尝试调用您的post方法。