使用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
相关产品推荐
相关产品推荐

