如何使用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
相关产品推荐
相关产品推荐

