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

登录捕获用户ID后,添加问题时无法存入questions表的技术求助

嗨,我看你遇到的问题是登录时能拿到用户ID,但添加问题的时候没法把这个ID存到questions表里对吧?我帮你梳理几个关键的排查点和解决办法:

解决步骤梳理

1. 先确认questions表是否有user_id字段

这是最基础的前提——如果数据库里的questions表根本没有用来存储用户ID的字段,那肯定存不进去。你需要:

  • 登录数据库管理工具(比如phpMyAdmin、Navicat),检查questions表结构,确认是否存在user_id字段(建议设置为无符号整数类型,并关联users表的id作为外键);
  • 如果没有这个字段,用Laravel迁移来添加:
    首先生成迁移文件:
    php artisan make:migration add_user_id_to_questions_table --table=questions
    
    然后打开生成的迁移文件,补充字段定义:
    public function up()
    {
        Schema::table('questions', function (Blueprint $table) {
            $table->unsignedBigInteger('user_id')->after('question_id');
            // 关联users表的id,删除用户时自动删除其所有问题
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        });
    }
    
    public function down()
    {
        Schema::table('questions', function (Blueprint $table) {
            $table->dropForeign(['user_id']);
            $table->dropColumn('user_id');
        });
    }
    
    最后执行迁移:
    php artisan migrate
    

2. 修改Controller的store方法,手动关联用户ID

你目前的代码里完全没有处理用户ID的赋值逻辑,所以需要补充这部分。Laravel中可以直接通过auth()助手函数获取当前登录用户的ID:

public function store(Request $request)
{
    // 建议先添加请求数据验证,保证提交的内容合法
    $validatedData = $request->validate([
        'order' => 'required|integer',
        // 这里补充你其他需要验证的字段,比如问题内容、标题等
    ]);

    // 方式1:手动创建模型实例并赋值
    $question = new Question();
    $question->user_id = auth()->id(); // 核心:把当前登录用户的ID赋值给user_id字段
    $question->order = $request->input('order');
    // 赋值其他字段,比如 $question->content = $request->input('content');
    $question->save();

    // 方式2:用create批量赋值(更简洁,但需要模型设置$fillable)
    // $question = Question::create([
    //     'user_id' => auth()->id(),
    //     'order' => $request->input('order'),
    //     // 其他需要赋值的字段
    // ]);

    return redirect()->back()->with('success', '问题添加成功!');
}

3. 确保Question模型设置了可填充字段

如果你选择用create方法批量赋值,必须在Question模型中声明允许填充的字段,否则会触发MassAssignmentException异常:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Question extends Model
{
    // 列出所有允许批量赋值的字段,包括user_id
    protected $fillable = ['user_id', 'order', 'content'];
}

另外提个小优化:你代码里手动生成question_id的方式其实没必要,建议把questions表的question_id设置为自增主键,Laravel会自动帮你处理ID的生成,既简洁又能避免并发场景下的ID冲突问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:27:23