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

将SQL查询转为Laravel Eloquent:RAW方法使用故障求助

解决Laravel中SOUNDEX匹配的查询构造器问题

我来帮你搞定这个语音匹配的查询问题!你这条SQL的核心是利用SOUNDEX函数做语音相似性匹配,在Laravel里完全可以通过whereRaw来完美还原逻辑,而且能避免SQL注入风险,这应该就是你之前用raw方法没跑通的关键原因。

正确的实现代码

直接使用whereRaw配合参数绑定,既简洁又安全:

$searchTerm = 'Eng. Premier League';

// 使用DB门面查询
$leagues = DB::table('leagues')
    ->whereRaw("SOUNDEX(name) LIKE CONCAT('%', SUBSTRING(SOUNDEX(?), 5), '%')", [$searchTerm])
    ->get();

// 如果用Eloquent模型(假设模型名为League)
$leagues = League::whereRaw("SOUNDEX(name) LIKE CONCAT('%', SUBSTRING(SOUNDEX(?), 5), '%')", [$searchTerm])
    ->get();

关键细节说明

  • 参数绑定:代码里的?会被[$searchTerm]里的变量安全替换,这比直接把变量拼进SQL字符串里更安全,能防止SQL注入,也是Laravel推荐的写法。
  • 还原原始逻辑:这条whereRaw语句完全复刻了你给出的SQL查询,包括SOUNDEX的调用、SUBSTRING截取和CONCAT拼接模糊匹配的部分。

额外提醒

如果你的需求是匹配完整的SOUNDEX编码(毕竟标准SOUNDEX返回的是4位编码,从第5位开始截取会得到空值),可以把SUBSTRING(SOUNDEX(?), 5)改成SOUNDEX(?),这样就变成匹配完整的语音编码了,你可以根据实际业务需求调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:02:20