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

如何使用Laravel Eloquent删除复合主键记录?解决id字段报错

Laravel中复合主键表的记录删除方案

方案一:正确定义复合主键

在对应的Eloquent模型里,明确指定复合主键,并关闭自增主键特性(复合主键通常不是自增类型)。

模型代码示例:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Like extends Model
{
    // 定义复合主键数组
    protected $primaryKey = ['crdid', 'usrid'];

    // 关闭自增主键(必须设置,否则Eloquent会报错)
    public $incrementing = false;

    // 若模型名与表名不一致,需指定表名
    protected $table = 'likes';
}

定义后的删除方式:

// 通过条件查询删除
Like::where('crdid', $crdId)->where('usrid', $userId)->delete();

// 直接通过复合主键值删除
Like::destroy([$crdId, $userId]);

方案二:不定义复合主键直接删除

如果不想修改模型,也可以直接通过完整的where条件定位记录后执行删除,避免Eloquent自动添加默认id主键的查询条件。

代码示例:

// 使用模型查询删除
\App\Models\Like::where('crdid', $crdId)
    ->where('usrid', $userId)
    ->delete();

// 或者使用DB门面直接操作表
\DB::table('likes')
    ->where('crdid', $crdId)
    ->where('usrid', $userId)
    ->delete();

错误原因说明:

你遇到的「Column not found: 1054 Unknown column 'id' in 'where clause'」错误,是因为Eloquent默认将id作为单主键,当模型未指定复合主键时,执行delete操作会自动拼接where id = ?的条件,但你的likes表并没有id字段,因此触发报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:16