SQLSTATE [HY000]:常规错误:1364字段“ contactId”没有默认值

时间:2019-12-10 12:56:09

标签: php mysql laravel eloquent

在我的模型(Customer)上,我有一个必需的参数:$contactId

执行Customer::create(['contactId' => $contactId])时出现以下错误:

  

“ message”:“ SQLSTATE [HY000]:常规错误:1364字段'contactId'没有默认值(SQL:插入customersupdated_atcreated_at )值(2019-12-10 12:33:46,2019-12-10 12:33:46))“

在插入语句中找不到contactId字段。 contactId的值设置为4,对应于通过FK在数据库中的正确值。

Customer表的迁移:


`Schema::create('customers', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
            $table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
            $table->bigInteger('contactId')->unsigned();
            $table->foreign('contactId', 'FK_customer_contactId_contact_id')
                ->references('id')
                ->on('contacts');
        });`

是什么导致Eloquent在此处无法创建正确的插入语句?我已经在整个流程和数据库中三遍检查了contactId的拼写。

当我手动向customers中插入一行时,检索数据和contact-关系没有问题。

感谢您的时间!

3 个答案:

答案 0 :(得分:7)

$fillable模型中设置contactId Customer

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    protected $fillable = ['contactId'];
}

答案 1 :(得分:3)

如果您使用create方法将数据保存到数据库中,那么必须在模型中写入此fillable属性

<?php

class Customer extends Model
{
    protected $fillable = ['contactId'];
}

答案 2 :(得分:2)

在模型中使contactId $ fillable

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Customer extends Model
{
    protected $fillable = ['contactId'];
}

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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