我正在运行一个查询,其中$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] 删除。
我来说两句