Изменения CodeIgniter, расширяющие драйверы баз данных для их использования с запросами UNION

Моя цель – использовать запросы 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 

Если кто-то сделал это без настройки системной папки, пожалуйста, помогите 🙁