Работа над классом абстракции баз данных еще длится, хотя уже сейчас можно рассмотреть некоторые примеры и дать себе представление о том, как все будет работать дальше.
Коротко о главном
На данный момент уже есть все то, с помощью чего мы можем совершать подключение к базе данных и производить запросы, использовать Query Builder — класс построения запросов. Пока что ведется работа над Query Caching — классом кэширования запросов, а также Database Forge — вспомогательным классом работы с базой данных и ее таблицами.
Несмотря на достаточно большие количество изменений, использование будет достаточно знакомым и удобным.
Теперь в именах методов вместо змеиного стиля используется верблюжий стиль. Конструктор запросов будет работать в привычном режиме, изучить придется только новые функции. Это очень хорошо, ведь не придется переучиваться и привыкать к новому синтаксису. Но рассмотрим пример изменений.
Конфигурация
Файлы конфигурации по структуре останутся такими же, как и старые. Пока не было необходимости их менять и придумывать что-то новое.
Но здесь произошло небольшое изменение. Если раньше в файле были просто перечислены элементы массива, то теперь это простой класс с тем же массивом.
class Database extends \CodeIgniter\Database\Config
{
/**
* Lets you choose which connection group to
* use if no other is specified.
*
* @var string
*/
public $defaultGroup = 'default';
/**
* The default database connection.
*
* @var array
*/
public $default = [
'dsn' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'dbdriver' => 'MySQLi',
'dbprefix' => '',
'pconnect' => false,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => false,
'cachedir' => '',
'charset' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swapPre' => '',
'encrypt' => false,
'compress' => false,
'stricton' => false,
'failover' => [],
'saveQueries' => true,
];
//--------------------------------------------------------------------
}
Чистые запросы
Создание чистых запросов без использования инструмента Query Builder прост. Нужно получить экземпляр базы данных, запустить query () метод и получить требуемый результат.
// Connects to the default connection, 'default' in this example.
$db = Config\Database::connect();
$query = $db->query('SELECT * FROM users');
// Get results as arrays
$results = $query->getResultArray();
// Get results as objects.
$results = $query->getResultObject();
// Get result as custom class instances
$result = $query->getResult('\My\Class');
Здесь нужно упомянуть, что функция num_rows () была удалена.
Ранее она не была поощрена к использования из-за имеющейся ужасной производительностью и проблемы с памятью при ее использовании.
Вместо этого все result * () методы возвращают пустые массивы, если нет результатов, в то время как все row * () методы не возвращают нуль.
Пример с параметром связывания запроса:
$query = $db->query('SELECT * FROM users WHERE id > ? AND role = ?', [3, 'Admin']);
Параметр связывания получил новый трюк, с именованными параметрами:
$query = $db->query('SELECT * FROM users WHERE id > :id AND role = :role',
[ 'id' => 3,
'role' => Admin'
]
);
Все значения автоматически экранируются. Поэтому все запросы безопасны.
Сохраненные запросы
Одним из самых больших изменений в слое базы данных является то, что все запросы сохраняются в истории как объекты запроса, вместо строк в массиве. Это частично очистит код, позволит более гибко кэшировать запрос и т.п.
Например, если нужно получить $ db-> getLastQuery() то в результате вы получите объект запроса, а не строку.
Query Builder
Конструктор запросов работает так, как все привыкли, с одним большим изменением. Query Builder стал собственным классом, а не частью файлов драйвера.
$db = Config\Database::connect();
$result = $db->table('users')
->select('id, role')
->where('active', 1)
->get();
Что еще будет?
Новые методы QueryBuilder — будет добавлены, после того, как Лонни разведает другие фреймворки :) Это позволит увидеть какие полезные функции можно было бы внедрить.
Ниже краткий список новых функций:
- first() — метод для получения первого результатапредставляет собой удобный метод для получения самого первого результата.
- increment() и decrement() методы
- chunk() — метод цикла по всем результатам запроса. Позволит обрабатывать огромное количество строк не убивая сервер и не делая проблемы с памятью.
Улучшенная модель — в CodeIgniter 3 по прежнему есть класс CI_Model, чтобы обеспечить легкий доступ к остальным частям фреймворка, получить доступ к библиотекам и т.д.
В CodeIgniter 4 не будет ни CI_file ни MY_file.
Страничный вывод — эта идея была взята из Laravel и будет работать вместе с новой моделью, чтобы можно было сделать просто так:
$model->paginate(20)
Ссылки по теме
Источник: First Glimpse at CodeIgniter 4 Database Layer
CodeIgniter Wikipedia: ru.wikipedia.org/wiki/CodeIgniter
Официальный сайт CodeIgniter: www.codeigniter.com
Официальный форум CodeIgniter: forum.codeigniter.com
Хотелось бы конечно чтобы побольше как в laravel было, тогда будет годно и можно использовать в небольших проектах.