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

克里斯·穆恩奇

我正在运行一个查询,其中$sale_ids可能包含100到数千个sale_id。我正在寻找一种无需修改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();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

正则表达式无效:"/^[+]?[0-9]{0,1}[-.]?\(?([0-9]{3})\)?[-.]?([0 -9]{3})[-. ]?([0-9]{4})$/gm" in javscript

php,正则表达式preg_match特定单词0或1次

preg_match中的正则表达式,返回3个匹配项

0-100数字范围正则表达式,不包括1和3

正则表达式:任何字母、数字和 0 最多 3 个特殊字符

Gitlab-CI:AWS S3 部署失败

CI3(Twig)查询结果数组为空

查找包含 1 到 4 个大写字母和 0 到 3 位数字的字符串(Visual Studio 代码、javascript 正则表达式)

正则表达式在德国管道前获取文本|fbf4cf3c-ebfe-43c8-aaf9-6811bd3488b0

正则表达式包含以下[0-9],[az],[AZ]中的至少3个或特殊字符($除外)

Java模式匹配无法找到具有正则表达式[A-Z0-9 ._%+-] + @ [A-Z0-9 .-] {3,65} \。[AZ] {2,4}的电子邮件

(0|10)* 正则表达式

被0除的正则表达式

0或正数的正则表达式

仅在索引0和3处渲染

PHP正则表达式转义字符错误:“ preg_match():编译失败:缺少”

0.(0) 的正则表达式应该如何?

正则表达式错误:在位置0处无重复

正则表达式,用于egrep查找具有至少一个0和至少两个3的行

正则表达式匹配至少6位数字,最多只能有3位与0不同的数字

如何使用正则表达式在lookhead中给出范围,例如^(?=(.*[az]){1,3})(?=.*[0-9]).{2,5}$

CI高级SQL查询?

正则表达式:bash 3 vs bash 4

如何扩展CI3 $ this-> db

在SCSI1(0,0,0)(sda)的分区#3中创建交换空间失败

创建序列0、0、0、0、0、1、1、1、1、1、2、2、2、2、2、3、3、3、3、3、4、4、4、4、4 ,带有seq()的4

travis_tag上的travis-ci正则表达式无法解析

Gitlab CI无法从Pipfile.lock安装正则表达式

基于正则表达式的规则子句在GitLab CI中不起作用