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
相关产品推荐
相关产品推荐

