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

为何Eloquent查询的where条件未生效?调用first()后SQL无筛选

问题原因及解决方案

嘿,这个问题我之前踩过坑!原因其实出在你调用方法的顺序上,咱们拆解来看:

当你执行Players::where('id_player','=',3113)->first()->toSql()的时候,first()方法会立即触发数据库查询,并返回对应的Players模型实例(或者null)。这时候再调用toSql(),它返回的是该模型类默认的基础查询语句(也就是select * from players),而不是你刚才构建的带where条件的查询。

正确的做法

你需要在执行查询(比如first()、get()这类会触发SQL执行的方法)之前,调用toSql()来查看构建好的完整查询语句:

public function playerLineup(Request $request){
    $e = Players::where('id_player','=',3113)->toSql();
    dd($e);
}

如果既需要查看SQL,又要获取查询结果,可以拆成两步:

public function playerLineup(Request $request){
    // 先构建查询,不执行
    $query = Players::where('id_player','=',3113);
    // 查看完整SQL语句
    dd($query->toSql());
    // 后续执行查询获取结果
    $player = $query->first();
}

另外补充说明:你模型里设置的protected $primaryKey = 'idp';完全没问题,因为你查询的是id_player字段,和主键配置无关,这不是导致where条件不生效的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:15:03