You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Laravel Tinker插入数据时遇Illuminate\Database\QueryException错误求助

Laravel Tinker插入Post数据时SQLSTATE[HY000]: 1364错误解决方法

错误信息

Illuminate\Database\QueryException SQLSTATE[HY000]: General error: 1364 Field 'category_id' doesn't have a default value (Connection: mysql, SQL: insert into posts (title, excerpt, body, updated_at, created_at) values (My Family Post, Excerpt for my post, Lorem Ipsum dolor sit amet., 2023-10-18 16:21:36, 2023-10-18 16:21:36)).

执行代码

use App\Models\Post;
Post::create([ 
    'title' => 'My Family Post', 
    'excerpt' => 'Excerpt for my post', 
    'body' => 'Lorem Ipsum dolor sit amet.', 
    'slug' => 'my-family-post', 
    'category_id' => 1
]);

问题原因

从生成的SQL语句能看到,category_id和slug字段没被包含在插入语句里——这是因为Laravel的create()方法会过滤掉不在模型批量赋值白名单($fillable)中的字段。数据库里category_id是必填字段且无默认值,所以触发了1364错误。

解决方法

打开app/Models/Post.php,更新模型的$fillable属性,把slug和category_id加入白名单:

class Post extends Model
{
    use HasFactory;

    protected $fillable = [
        'title',
        'excerpt',
        'body',
        'slug',
        'category_id'
    ];
}

如果不想维护白名单,也可以设置$guarded = [](允许所有字段批量赋值,注意风险):

protected $guarded = [];

修改完成后,重新在Tinker中执行插入代码即可成功写入数据。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 00:54:50