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

Laravel控制器插入数据无报错但未存储,求问题排查

Laravel数据插入无报错但未存储问题排查

问题定位与修复方案

1. 字段名不匹配(直接导致插入失败)

迁移表中事件关联字段是events_id,但控制器里赋值的是$time->event_id = '1';——少了一个s,导致这个必填外键字段未被赋值,违反数据库约束。但因为Laravel默认未强制抛出异常,所以没报错。
修复:把控制器里的event_id改成events_id。

2. 模型关联多处错误

  • 关联关系类型错误:Time表的user_id、leaderboard_id、events_id是外键,对应关系应该是belongsTo,不是hasOne——hasOne是当前模型拥有另一个模型的记录,而这里是Time属于某个用户/排行榜/事件。
  • 参数顺序颠倒:hasOne/belongsTo的参数顺序是「关联模型类,外键字段,当前模型主键」,你写反了。
  • 拼写错误:Leaderboard关联里的模型类写成了Leadeboard(少了r),会导致类找不到。
  • 大小写不匹配:关联里的User_id、Events_id应该和数据库字段一致,用小写user_id、events_id。

3. 调试建议

  • 开启.env里的APP_DEBUG=true,能看到具体SQL错误。
  • 用$time->saveOrFail()代替$time->save(),强制抛出异常,直接定位问题。
  • 插入前可以用dd($time->getErrors())查看验证错误。

修正后代码示例

控制器代码

public function store3(){
    $time = new Time;
    $time->leaderboard_id = '1';
    $time->user_id = '1';
    $time->events_id = '1'; // 修正字段名
    $time->time = '1';
    $time->avg = '1';
    
    $time->saveOrFail(); // 强制抛出异常,便于调试
    return $this->scramble3(0);
}

模型代码

class Time extends Model
{
    use HasFactory;
    protected $table = "time";

    protected $fillable = [
        'user_id',
        'leaderboard_id',
        'events_id',
        'time',
        'avg'
    ];

    // 修正关联关系为belongsTo,参数、命名、拼写全部修正
    public function user(){
        return $this->belongsTo(User::class, 'user_id');
    }

    public function leaderboard(){
        return $this->belongsTo(Leaderboard::class, 'leaderboard_id');
    }

    public function event(){
        return $this->belongsTo(Event::class, 'events_id');
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 13:30:33