Моя цель – использовать запросы UNION в Active Record.
Некоторые люди предложили мне использовать метод $ this-> db-> last_query (); чтобы получить запросы, которые я хочу, затем объединяя их с UNION.
Проблема в том, что $ this-> db-> from (); метод, используемый в драйвере MySQL в Active Record, использует скобки вокруг предложения from (например: SELECT * FROM ('table')) и не позволяет использовать UNION.
Поэтому я снова проверил и обнаружил, что могу изменить функцию _from_tables, определенную в
system/database/drivers/mysql/mysql_driver.php Я изменил код:
 function _from_tables($tables) { if ( ! is_array($tables)) { $tables = array($tables); } return '('.implode(', ', $tables).')'; } 
к этому :
 function _from_tables($tables) { if ( ! is_array($tables)) { $tables = array($tables); } return implode(', ', $tables); } 
Но если бы я задал здесь вопрос о том, как расширить драйвер CI mysql (на самом деле, я хочу только заменить метод from с помощью настраиваемого): CodeIgniter Hooks для библиотеки Active Record, и мне предложили задать новый вопрос.
Поэтому один пользователь предложил добавить два файла, которые я сделал, в свои папки:
 application/libraries/MY_DB_mysql_driver.php application/core/MY_Loader.php 
Я получаю эти ошибки при использовании этого метода:
  A PHP Error was encountered Severity: 8192 Message: Assigning the return value of new by reference is deprecated Filename: core/MY_Loader.php Line Number: 32 
Поэтому я изменил сценарий, который он мне дал (вы можете увидеть его на странице https://github.com/EllisLab/CodeIgniter/wiki/Extending-Database-Drivers ), удалив & in:
 $db =& new $my_driver(get_object_vars($db)); 
Теперь я получаю следующую ошибку:
 Fatal error: Call to undefined method MY_DB_mysql_driver::where() in \system\libraries\Session.php 
Если кто-то сделал это без настройки системной папки, пожалуйста, помогите 🙁