Laravel查询构造器where方法第二个参数被替换为问号问题求助
问题原因排查方案
你看到的?是Laravel ORM的参数预编译占位符,属于正常机制,不是参数没有传入:Laravel为了避免SQL注入,会先把SQL模板和参数分开处理,?只是用来占位,实际查询时会自动替换成你传入的参数值,不用在这个点上纠结。
你实际查询无结果的问题可以按以下步骤逐一排查:
- 先确认
Company模型对应的数据表是否正确,如果你的表名不是Laravel默认的companies,需要在模型类中手动指定表名:protected $table = '你的实际表名'; - 检查字段大小写匹配问题:如果数据库中存储的字段是全小写的
co_id,你写大写开头的Co_id会因为大小写不匹配查不到对应数据,改成和数据库完全一致的字段名即可。 - 确认
$companyId的类型和数据库Co_id字段类型一致:比如数据库字段是int整型,你拿到的$companyId是字符串类型的话,可以强制转换后再传入:$Companies=Company::where( 'Co_id' , (int)$companyId )->first(); - 打印实际执行的SQL和绑定参数确认:把原来的
dd($Companies)替换成下面的代码,就能看到实际传入的参数值,确认是否符合预期:$query = Company::where('Co_id', $companyId); dd($query->toSql(), $query->getBindings()); - 检查是否存在全局作用域干扰:如果你的
Company模型定义了全局查询作用域,会自动在查询时拼接额外的where条件,导致查不到结果,可以先取消所有全局作用域测试:$Companies=Company::withoutGlobalScopes()->where( 'Co_id' ,$companyId )->first();
内容的提问来源于stack exchange,提问作者Noof Aldosri
相关产品推荐
相关产品推荐

