Laravel删除查询无法执行:未知id列错误,拒绝修改order_id列名
解决Laravel删除功能中"Unknown column 'id' in 'where clause'"错误
问题根源在于Laravel Eloquent模型的默认主键规则:框架默认把id作为表的主键,调用delete()方法时会基于id生成删除语句,但你的表用order_id做主键,且模型未明确指定,导致框架找不到id列报错。
只需要修改clientHasOrder模型,添加两个关键属性即可解决:
class clientHasOrder extends Model { use HasFactory; public $timestamps = false; // 指定表的主键为order_id protected $primaryKey = 'order_id'; // 关闭自增属性(因为order_id是字符串类型,非自增整数) public $incrementing = false; protected $fillable = [ 'order_id', 'product_id', 'amount', ]; }
说明
protected $primaryKey = 'order_id':告诉Eloquent,该模型对应的表主键是order_id而非默认的id。public $incrementing = false:由于你的order_id是字符串类型(迁移中定义为string),不是自增整数,必须关闭自增属性,避免Eloquent按自增整数逻辑处理主键引发其他问题。
修改模型后,原控制器代码无需改动,删除功能即可正常运行。
额外注意:迁移中$table->string('order_id')->constrained();需确保关联的orders表主键也是字符串类型,否则外键约束会创建失败,但这不是当前删除错误的直接原因。
内容的提问来源于stack exchange,提问作者laraCoder
相关产品推荐
相关产品推荐

