Laravel获取登录用户ID存入数据库遇1048非空错误求助
解决1048 Column 'user_id' cannot be null错误
问题根源
你从Session获取的user_id值为null,违反了数据库user_id字段非空的约束,导致报错。以下是针对性修复方案:
1. 修正用户ID获取方式
Laravel默认登录用户的ID可以通过Auth门面直接获取,比手动读取Session更可靠,避免键名大小写错误:
// 替换原session获取代码 $user_id = auth()->id();
如果坚持用Session,确认键名是否为全小写的user_id(Laravel Auth默认存储键名),而非你代码中的User_id。
2. 强制验证用户登录状态
未登录用户访问该接口时,user_id必然为null,因此要添加登录验证中间件:
- 在控制器构造方法中添加:
public function __construct() { $this->middleware('auth'); }
- 或者在路由中直接绑定:
Route::post('/lend-book', [YourController::class, 'LendBook'])->middleware('auth');
3. 增加请求参数验证
确保book_id合法存在,同时避免非法请求:
public function LendBook(Request $request) { // 验证book_id必填且对应数据库中存在的书籍 $request->validate([ 'book_id' => 'required|exists:books,id', ]); $user_id = auth()->id(); $book_id = $request->book_id; $q = new lend; $q->user_id = $user_id; $q->book_id = $book_id; $q->save(); return 'test'; }
4. 检查模型可填充字段
确认lend模型中user_id和book_id已加入$fillable数组,否则无法通过赋值写入数据库:
class lend extends Model { protected $fillable = ['user_id', 'book_id']; }
内容的提问来源于stack exchange,提问作者chielvandijk
相关产品推荐
相关产品推荐

