为何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
相关产品推荐
相关产品推荐

