【发布时间】:2019-01-05 22:03:24
【问题描述】:
我在使用 laravel 时遇到了这个错误。我正在尝试保存图书数据并使用 user_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 字段 'user_id' 没有默认值 (SQL: 插入
books(name,page,ISBN,price, @ 987654327@,updated_at,created_at) 值)) ◀"
在我的用户类中我有:
public function books(){
return $this->hasMany(Book::class);
}
在我的 Book 课上:
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() user_id(我已经评论过)它给了我 user_id 但我不知道为什么我会遇到这个错误
【问题讨论】:
-
您是否在插入时指定
user_id的值(答案是否定的)?您的表中是否存在user_id字段(答案是肯定的)?当您未在插入中指定 时,user_id的值应该是多少?一个默认值。创建表时未指定。那么,为什么你会得到那个错误呢?我给了你所有的线索,错误信息也告诉你为什么。 -
默认值应该是多少?我给它定义了可为空的,但每当我保存一本书时,实际上保存了两本书(一本书为 null,另一本书为 user_id)。
-
你为什么有这行
Book::create($request->except('_token'));?您可能应该删除它。您已经使用books()->create(...)保存了它。 -
哦!谢谢。我删除了它,它的工作原理。我是 laravel 和 php 的新手。我在另一个项目的视频中看到了,但没有注意到!