Laravel 8中使用updateExistingPivot()时如何获取中间表旧字段值
问题原因
你原写法报错是因为PHP上下文无法直接识别SQL字段noOfUpdates为合法变量,该表达式在PHP层面就会抛出未定义变量错误,根本不会发送到数据库执行。
解决方案
方案1(推荐,无并发问题,单SQL执行)
用DB::raw()包裹数据库层面的自增逻辑:
use Illuminate\Support\Facades\DB; $user = User::find(1); $user->roles()->updateExistingPivot($roleId, [ 'noOfUpdates' => DB::raw('`noOfUpdates` + 1') ]);
方案2(适合需要额外处理pivot值的场景)
先读取当前pivot字段值,再做更新:
$user = User::find(1); // 先获取对应关联的pivot数据 $role = $user->roles()->where('roles.id', $roleId)->first(); $user->roles()->updateExistingPivot($roleId, [ 'noOfUpdates' => $role->pivot->noOfUpdates + 1 ]);
注意方案2是两次数据库操作,高并发场景下可能出现计数不准的问题,无特殊需求优先使用方案1。
内容的提问来源于stack exchange,提问作者Stark
相关产品推荐
相关产品推荐

