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

Laravel中如何将含Where语句的变量用于查询?

解决Laravel中动态链式查询条件的调用问题

你当前的写法错误在于$filter_value是字符串形式的方法调用链,直接通过Job::$filter_value调用完全无效,Eloquent无法识别这种格式的条件。下面提供两种可行的解决方式:

方法一:数组化条件后循环添加(推荐)

把过滤条件改成二维数组格式,遍历数组逐个添加where条件,这种方式安全且易维护:

// 重新定义过滤条件为数组
$filter_conditions = [
    ["document_language_id", 2],
    ["manufacturer_id", 1],
    ["manual_type_id", 1]
];

// 初始化查询构造器
$query = Job::query();

// 遍历添加所有where条件
foreach ($filter_conditions as $condition) {
    $query->where($condition[0], $condition[1]);
}

// 执行分页查询
$jobs = $query->paginate(10);

方法二:使用eval执行字符串条件(不推荐)

如果必须保留原字符串形式的条件,可以用eval执行,但仅当$filter_value的内容完全可信时才用,否则会有代码注入风险:

// 注意:确保$filter_value的来源绝对安全
$query = Job::query();
eval('$query = $query' . $filter_value . ';');
$jobs = $query->paginate(10);

注意事项

优先选择方法一,它避免了eval带来的安全隐患,同时代码的可读性和可扩展性更强,后续调整过滤条件也更便捷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 15:54:17