Моя цель – использовать запросы 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
Если кто-то сделал это без настройки системной папки, пожалуйста, помогите 🙁