【问题标题】:"SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into“SQLSTATE [HY000]:一般错误:1364 字段 'user_id' 没有默认值(SQL:插入
【发布时间】: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 的新手。我在另一个项目的视频中看到了,但没有注意到!

标签: php mysql laravel


【解决方案1】:
Auth::user()->books()->create($request->except('_token'));

将自动在Book 实体中设置user_id

但是在这里

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

user_id 不会被设置。所以 laravel 会尝试插入没有user_id 的书(这是必需的),MySQL 会报错。但是你也不需要第二行,因为这本书已经和第一行一起保存了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-10
    • 2020-05-25
    • 2021-03-22
    • 2021-09-10
    • 1970-01-01
    • 2019-12-01
    • 2021-05-23
    • 2019-05-09
    相关资源
    最近更新 更多