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

Laravel 8更新pivot中间表报Call to a member function where() on int错误如何解决

问题根因

你的查询构造器调用顺序错误,update() 方法执行后会返回受影响的行数(整数类型),你在整数返回值后调用where()方法自然会触发Call to a member function where() on int错误。
另外你当前写法实际会先更新student_topic_examiner全表所有行的internal_id、external_id字段,你认为的“数据更新成功”只是碰巧你需要修改的行也被覆盖了,这是非常危险的全表操作错误。

修复方案

方案1:调整查询构造器顺序

将where()筛选放在update()之前,先锁定要更新的行再执行更新操作:

DB::table("student_topic_examiner")
    ->where("roll_number", "=", $request->input('roll_number'))
    ->update([
        "internal_id" => $internal->id,
        "external_id" => $external->id
    ]);

方案2:使用Eloquent关联的pivot操作(更符合Laravel最佳实践)

如果你已经定义了Student和Topic/Examiner的多对多关联,可以直接用关联方法操作中间表,避免手写DB查询:

// 示例:Student模型关联定义
public function examiners()
{
    return $this->belongsToMany(Examiner::class, 'student_topic_examiner', 'roll_number', 'internal_id')
        ->withPivot('external_id', 'topic_id');
}

// 更新时直接调用
$student->examiners()->updateExistingPivot($internalId, ['external_id' => $externalId]);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:18:04