
本文详解如何在 Laravel Eloquent ORM 中正确转换 SELECT * FROM products WHERE category LIKE 'Laptops' 这类 SQL 查询,涵盖基础语法、通配符使用、安全注意事项及常见误区。
本文详解如何在 laravel eloquent orm 中正确转换 `select * from products where category like 'laptops'` 这类 sql 查询,涵盖基础语法、通配符使用、安全注意事项及常见误区。
在 Laravel 中,Eloquent ORM 提供了链式查询构造器,可将原始 SQL 优雅地转化为面向对象的 PHP 代码。对于 SELECT * FROM products WHERE category LIKE 'Laptops',需注意:原始 SQL 中的 LIKE 'Laptops' 实际等价于精确匹配(无通配符),但通常业务场景中意图是“包含‘Laptops’”,因此应使用 % 通配符。
✅ 正确写法(模糊匹配,推荐):
use App\Models\Product;
$products = Product::where('category', 'like', '%Laptops%')->get();
⚠️ 注意事项:
- 模型名应遵循 Laravel 命名规范:数据库表
products对应模型Product(单数、首字母大写、位于app/Models/目录下); -
'like'是 Eloquent 内置操作符,区分大小写(MySQL 默认不敏感,但依赖底层 collation); - 若需前缀匹配(如以 "Laptops" 开头),用
'%Laptops';若需后缀匹配(如以 "Laptops" 结尾),用'Laptops%'; - 避免手动拼接通配符到变量中(如
"%" . $keyword . "%"),以防 SQL 注入——Eloquent 的where()方法自动参数化绑定,天然安全。
❌ 常见错误示例:
// 错误:缺少通配符 → 等价于 '=' 精确匹配(非 LIKE 语义)
Product::where('category', 'like', 'Laptops')->get();
// 错误:手动字符串拼接(破坏参数绑定,存在风险)
Product::whereRaw("category LIKE '%" . $request->input('q') . "%'")->get();
? 进阶提示:
如需忽略大小写或支持中文分词,建议结合数据库全文索引,或使用 whereRaw() 配合 LOWER() 函数(仅当必要时):
Product::whereRaw('LOWER(category) LIKE ?', ['%laptops%'])->get();
总之,Eloquent 的 where('column', 'like', $value) 是最简洁、安全且符合 Laravel 最佳实践的方式。务必先确认模型已正确定义,并始终优先使用查询构造器而非原始 SQL,以保障可维护性与安全性。











