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

Laravel 9中find()与delete()方法失效问题排查求助

Laravel 9中find()和delete()方法失效的问题排查

核心问题:模型主键属性名写错

你的Users模型中,主键属性名拼写错误。Laravel模型规定主键属性为**$primaryKey**(驼峰命名,K大写),但你写成了$primarykey(k小写),导致Laravel无法识别自定义主键userid,默认使用id字段进行查询/操作,这是所有问题的根源。

分方法解释失效原因

1. find()方法失效

find()方法默认使用模型定义的主键字段查询数据。因为主键属性写错,Laravel会用默认的id字段而非userid执行查询,所以Users::find($id)实际是查找id = $id的记录,自然无法匹配到数据。而where('userid', '=', $id)->get()是明确指定字段查询,所以能正常工作。

2. delete()方法失效

  • 你用where('userid', '=', $id)->get()获取的是集合(Collection),不是单个模型实例,集合没有delete()方法,调用$user->delete()不会执行删除操作;
  • 即使你拿到单个模型实例,因主键属性写错,模型也无法正确识别主键值,无法执行删除逻辑。

修正方案

第一步:修正Users模型

class Users extends Model
{
    use HasFactory;
    protected $table = 'users';
    // 修正主键属性名,K大写
    protected $primaryKey = 'userid';
    
    // 可选:如果userid不是自增整数类型,添加以下配置
    // public $incrementing = false;
    // 可选:如果userid是字符串类型,添加以下配置
    // protected $keyType = 'string';
}

第二步:修正find()方法代码

// 现在find()会自动使用userid字段查询
$user = Users::find($id);
return redirect('/register/view');

第三步:修正delete()方法代码

推荐使用模型实例删除(更符合Laravel Eloquent规范):

$user = Users::find($id);
if ($user) {
    $user->delete();
}
return redirect('/register/view');

或者用查询构造器简化删除(无需判断是否存在,无匹配记录时不会执行删除):

Users::where('userid', $id)->delete();
return redirect('/register/view');

如果要通过where查询后删除单个实例,需用first()获取单个模型(而非get()返回集合):

$user = Users::where('userid', $id)->first();
if ($user) {
    $user->delete();
}
return redirect('/register/view');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 16:40:33