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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:20:27