如何将指定SQL语句转换为Laravel 5.5 Eloquent查询构建器格式?
Laravel 5.5 Eloquent 对应写法
我来帮你搞定这个问题!原SQL的核心逻辑是:筛选出包含standard关键词(标签、主题、详情、类型任意一个匹配)、ID在287到296之间且状态为激活的文章,最后按ID倒序排列。下面是能生成完全匹配原SQL的Eloquent写法:
use App\ArmArticle; // 假设你的模型类是ArmArticle,对应arm_articles表 $articles = ArmArticle::where(function ($query) { // 第一个条件组:多个字段的LIKE模糊匹配,用OR连接 $query->where('article_tag', 'like', '%standard%') ->orWhere('article_topic', 'like', '%standard%') ->orWhere('article_details', 'like', '%standard%') ->orWhere('article_type', 'like', '%standard%'); })->where(function ($query) { // 第二个条件组:ID范围 + 激活状态,用AND连接 $query->whereBetween('id', [287, 296]) ->where('article_active', 1); })->orderBy('id', 'desc') ->get(); // 换成->toSql()可直接查看生成的SQL语句
关键注意点
- 必须用嵌套闭包包裹两个条件组:Laravel会自动为每个闭包添加括号,确保SQL的逻辑优先级和原语句完全匹配。如果省略闭包直接链式调用,会因为
OR与AND的优先级差异导致逻辑错误。 - 验证SQL的方法:调用
->toSql()可以直接输出生成的SQL语句,方便你确认是否和原语句一致。
内容的提问来源于stack exchange,提问作者Okechukwu Eze
相关产品推荐
相关产品推荐

