Kotchasan Framework Documentation
Database Class
Database Class
\Kotchasan\Database is the core class for database connections and query building. It is used internally by DB and Model.
Creating an Instance
$db = \Kotchasan\Database::create();
// Connect to another connection
$db2 = \Kotchasan\Database::create('secondary');Configuration
From settings/database.php
// settings/database.php
return [
'default' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'myapp',
'username' => 'root',
'password' => '',
'prefix' => 'app',
'charset' => 'utf8mb4'
]
];From Code
\Kotchasan\Database::config([
'default' => [
'driver' => 'mysql',
'host' => 'localhost',
'database' => 'myapp',
'username' => 'root',
'password' => '',
'prefix' => 'app'
]
]);Query Methods
select() - Create SELECT query
$db = \Kotchasan\Database::create();
$users = $db->select('id', 'name', 'email')
->from('user')
->where(['status', 1])
->fetchAll();createQuery() - Create QueryBuilder
$db = \Kotchasan\Database::create();
$query = $db->createQuery()
->select('*')
->from('user');first() - Retrieve first record
$db = \Kotchasan\Database::create();
$user = $db->first('user');
$user = $db->first('user', ['id', 'name']);all() - Retrieve all records
$db = \Kotchasan\Database::create();
$users = $db->all('user');
$users = $db->all('user', ['id', 'name']);get() - Retrieve records with conditions
$db = \Kotchasan\Database::create();
$activeUsers = $db->get('user', ['status' => 1], ['id', 'name']);selectRaw() - Raw SQL select
$db = \Kotchasan\Database::create();
$result = $db->selectRaw('COUNT(*) as total, DATE(created_at) as date')
->from('orders')
->groupBy('date')
->fetchAll();insert() / update() / delete()
$db = \Kotchasan\Database::create();
// Insert
$db->insert('user')
->values(['name' => 'John', 'email' => 'john@example.com'])
->execute();
// Update
$db->update('user')
->set(['name' => 'Jane'])
->where(['id', 1])
->execute();
// Delete
$db->delete('user')
->where(['id', 1])
->execute();raw() - Run SQL directly
$db = \Kotchasan\Database::create();
$table = $db->getTableName('user');
$result = $db->raw(
"SELECT * FROM `{$table}` WHERE status = ?",
[1]
);Transaction
Manual
$db = \Kotchasan\Database::create();
$db->beginTransaction();
try {
$db->insert('orders')->values($order)->execute();
$db->insert('order_items')->values($items)->execute();
$db->commit();
} catch (\Exception $e) {
$db->rollback();
throw $e;
}Callback (Recommended)
$db = \Kotchasan\Database::create();
$result = $db->transaction(function ($db) use ($order, $items) {
$db->insert('orders')->values($order)->execute();
$orderId = $db->lastInsertId();
foreach ($items as $item) {
$item['order_id'] = $orderId;
$db->insert('order_items')->values($item)->execute();
}
return $orderId;
});Connection Management
connection() - Switch connection
$db = \Kotchasan\Database::create();
$users = $db->all('user');
$logs = $db->connection('logs')->all('access_log');getConnection() - Get connection instance
$connection = \Kotchasan\Database::getConnection('default');Debugging & Logging
getLastQuery() - Get last query
$db = \Kotchasan\Database::create();
$db->all('user');
echo $db->getLastQuery();getLastError() - Get last error
$db = \Kotchasan\Database::create();
try {
$db->raw('INVALID SQL');
} catch (\Exception $e) {
echo $db->getLastError();
}setLogger() - Set Logger
use Kotchasan\Logger\FileLogger;
$logger = new FileLogger(ROOT_PATH.'datas/logs/');
\Kotchasan\Database::setLogger($logger);createQueryLogger() - Create Query Logger
use Kotchasan\Logger\FileLogger;
$logger = new FileLogger(ROOT_PATH.'datas/logs/');
$queryLogger = \Kotchasan\Database::createQueryLogger($logger);Cache
configureCache() - Configure Query Cache
\Kotchasan\Database::configureCache([
'driver' => 'file',
'path' => ROOT_PATH.'datas/cache/'
], 3600);setCache() - Set Cache Instance
use Kotchasan\Cache\FileCache;
$cache = new FileCache(ROOT_PATH.'datas/cache/');
\Kotchasan\Database::setCache($cache, 3600);Utility Methods
getTableName() - Get table name with prefix
$db = \Kotchasan\Database::create();
$tableName = $db->getTableName('user');getPrefix() - Get table prefix
$db = \Kotchasan\Database::create();
$prefix = $db->getPrefix();emptyTable() - Truncate table
$db = \Kotchasan\Database::create();
$db->emptyTable('cache');optimizeTable() - Optimize table
$db = \Kotchasan\Database::create();
$db->optimizeTable('user');lastInsertId() - Get last insert ID
$db = \Kotchasan\Database::create();
$db->insert('user')->values([...])->execute();
$id = $db->lastInsertId();Method Reference
Static Methods
| Method | Description | Return |
|---|---|---|
create($connectionName = 'default') |
Create instance | Database |
config($config) |
Configure connections | void |
configureCache($config, $ttl) |
Configure cache | QueryCache |
setCache($cache, $ttl) |
Set cache instance | QueryCache |
setLogger($logger) |
Set logger | void |
getLogger() |
Get logger | LoggerInterface\|null |
getConnection($name) |
Get connection | ConnectionInterface\|null |
getQueryCache() |
Get query cache | QueryCache\|null |
createQueryLogger($logger) |
Create query logger | QueryLogger |
Instance Methods
| Method | Description | Return |
|---|---|---|
select($columns) |
Create SELECT query | QueryBuilderInterface |
createQuery() |
Create QueryBuilder | QueryBuilderInterface |
first($table, $columns) |
Get first record | mixed |
all($table, $columns) |
Get all records | array |
get($table, $where, $columns) |
Get records with condition | array |
selectRaw($expr, $bindings) |
Raw SELECT | QueryBuilderInterface |
insert($table) |
Create INSERT query | QueryBuilderInterface |
update($table) |
Create UPDATE query | QueryBuilderInterface |
delete($table) |
Create DELETE query | QueryBuilderInterface |
raw($sql, $params) |
Run raw SQL | ResultInterface |
beginTransaction() |
Begin transaction | bool |
commit() |
Commit transaction | bool |
rollback() |
Rollback transaction | bool |
transaction($callback) |
Run callback in transaction | mixed |
lastInsertId($name) |
Get last insert ID | string |
getLastQuery() |
Get last query | string\|null |
getLastError() |
Get last error | string\|null |
connection($name) |
Switch connection | Database |
getTableName($table) |
Get table name with prefix | string |
getPrefix() |
Get prefix | string |
emptyTable($table, $options) |
Truncate table | bool |
optimizeTable($table) |
Optimize table | bool |
Related Classes
- DB - Utility wrapper for simple CRUD
- Model - Base Model class
- QueryBuilder - Query building