Php &引用;SQLSTATE[HY000]:一般错误:1364字段';用户id';不';没有默认值(SQL:insert into

Php &引用;SQLSTATE[HY000]:一般错误:1364字段';用户id';不';没有默认值(SQL:insert into,php,mysql,laravel,Php,Mysql,Laravel,我在使用laravel时遇到此错误。我正在尝试保存书籍数据,并使用用户id保存其所有者用户。对于问题格式,我感到抱歉 public function store(InfoValid $request) { $request->validated(); $user = Auth::user()->books()->create($request->except('_token')); //dd($user ->user_id); Boo

我在使用laravel时遇到此错误。我正在尝试保存书籍数据,并使用用户id保存其所有者用户。对于问题格式,我感到抱歉

public function store(InfoValid $request)
{
    $request->validated();
    $user = Auth::user()->books()->create($request->except('_token'));
    //dd($user ->user_id);
    Book::create($request->except('_token'));
    redirect("/books");
}
}
“SQLSTATE[HY000]:一般错误:1364字段“用户id”没有默认值(SQL:插入
书籍
名称
页面
ISBN
价格
发布时间
更新时间
创建时间
)值))◀"

在我的用户类中,我有:

public function books(){
    return $this->hasMany(Book::class);
}
在我的书本课上:

protected $fillable = [
    "name" , "page" , "ISBN" , "price" , "published_at"
];

public function user()
{
return $this ->belongsTo(User::class);
}
在我的书桌上:

$table->unsignedInteger("user_id");

        $table->foreign('user_id')
            ->references('id')
            ->on('users')
            ->onDelete('cascade')
            ->onUpdate('cascade');
当我dd()用户id(我已经评论过)时,它会给我用户id,但我不知道为什么我会遇到这个错误

Auth::user()->books()->create($request->except('_token'));
将在
手册
实体中自动设置
用户id

但是这里

Book::create($request->except('_token'));

不会设置
user\u id
。因此,laravel将尝试在没有
user\u id
(这是必需的)的情况下插入书籍,MySQL会抱怨。但您也不需要第二行,因为书籍已与第一行一起保存。

您在插入时是否为
user\u id
指定了值(答案是否)?您的表中是否存在
user\u id
字段(答案为是)?如果在insert中未指定
用户id
的值,该值应该是什么?默认值。创建表时未指定该值。那么,为什么会出现该错误?我给出了所有线索,错误消息也会告诉您原因。默认值应该是什么?我将其定义为可为null,但每次保存book实际上保存了两本书(一本为null,另一本为fo user_id)。为什么有这行
book::create($request->except(“_token”);
?您可能应该删除它。您已经用
books()->create(…)保存了它
。噢!谢谢。我删除了它,它可以正常工作。我是laravel和php的新手。我在另一个项目的视频中看到了,但没有注意到!