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

如何在Laravel查询中程序化添加WHERE子句?

解决方案

不用编写原生SQL,Laravel查询构造器完全能实现多关键词的动态条件添加,按以下方式修改即可:

完整代码示例

// 假设你的关键词数组为 $keywords(比如从请求中获取:$keywords = request('keywords', []);)
// 先过滤空关键词,避免生成无效的 LIKE 条件
$keywords = array_filter($keywords);

// 初始化查询构造器,先构建基础查询逻辑
$query = DB::table('docs_text')
    ->select([
        'documents.id', 
        'documents.filename', 
        'documents.extension', 
        'documents.description', 
        'documents.created_at', 
        'documents.url'
    ])
    ->join('documents', 'docs_text.doc_id', '=', 'documents.id')
    ->groupBy([
        'documents.id', 
        'documents.filename', 
        'documents.extension', 
        'documents.description', 
        'documents.created_at', 
        'documents.url'
    ])
    ->orderBy('created_at');

// 循环添加每个关键词的 LIKE 条件
foreach ($keywords as $keyword) {
    $query->where('doc_text', 'like', "%{$keyword}%");
}

// 执行查询并获取结果
$docs = $query->get();

关键说明

  • 先将查询构造器实例存入变量$query,不要直接链式调用到get(),这样就能动态追加条件。
  • Laravel中连续调用where默认会生成AND逻辑,和你手动写andWhere效果完全一致。
  • array_filter用来过滤空关键词,避免出现LIKE '%%'这种无意义的条件。
  • 这种方式会自动处理SQL注入风险,Laravel会将关键词作为绑定参数,而非直接拼接进SQL语句。

可选优化:OR逻辑匹配

如果后续需要改成任意关键词匹配(OR逻辑),可以用闭包实现:

$query->where(function ($q) use ($keywords) {
    foreach ($keywords as $keyword) {
        $q->orWhere('doc_text', 'like', "%{$keyword}%");
    }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:15:58