我正在运行一个查询,其中$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();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。