regex – CI 3.0.4 large where_in查询导致原因消息:preg_match():编译失败:正则表达式在偏移处太大)

我正在运行一个查询,其中$sale_ids可能包含100到数千个sale_ids.我正在寻找一种方法来修复正则表达式错误,而无需修改CI 3的核心.

这在版本2中没有发生,并且不被认为是CI 3中的错误(我之前提出过这个问题).

我有办法让这个工作吗?我可以改变应用程序的逻辑,但这需要几天的工作.

我正在寻找一种方法来扩展/覆盖一个类,所以我可以允许这个查询工作如果没有办法通过覆盖这样做我将不得不破解核心(我不知道如何).

$this->db->select('sales_payments.*,sales.sale_time');
$this->db->from('sales_payments');
$this->db->join('sales','sales.sale_id=sales_payments.sale_id');
$this->db->where_in('sales_payments.sale_id',$sale_ids);
$this->db->order_by('payment_date');

错误是:

Severity: Warning

Message: preg_match(): Compilation Failed: regular expression is too large at offset 53249

Filename: database/DB_query_builder.PHP

Line Number: 2354

Backtrace:

File: /Applications/MAMP/htdocs/PHPpos/PHP-Point-Of-Sale/application/models/Sale.PHP
Line: 123
Function: get

File: /Applications/MAMP/htdocs/PHPpos/PHP-Point-Of-Sale/application/models/Sale.PHP
Line: 48
Function: _get_all_sale_payments

File: /Applications/MAMP/htdocs/PHPpos/PHP-Point-Of-Sale/application/models/reports/Summary_payments.PHP
Line: 60
Function: get_payment_data

File: /Applications/MAMP/htdocs/PHPpos/PHP-Point-Of-Sale/application/controllers/Reports.PHP
Line: 1887
Function: getData

File: /Applications/MAMP/htdocs/PHPpos/PHP-Point-Of-Sale/index.PHP
Line: 323
Function: require_once
没有一种很好的方法修改核心,所以我想出了一个小的改动,我用大量的where_in做了代码.启动一个组并在较小的块中创建where_in的位置
$this->db->group_start();
$sale_ids_chunk = array_chunk($sale_ids,25);
foreach($sale_ids_chunk as $sale_ids)
{
    $this->db->or_where_in('sales_payments.sale_id',$sale_ids);
}
$this->db->group_end();

相关文章

正则替换html代码中img标签的src值在开发富文本信息在移动端...
正则表达式
AWK是一种处理文本文件的语言,是一个强大的文件分析工具。它...
正则表达式是特殊的字符序列,利用事先定义好的特定字符以及...
Python界一名小学生,热心分享编程学习。
收集整理每周优质开发者内容,包括、、等方面。每周五定期发...