Kotchasan Framework Documentation
Model Class - Database Operations
Model Class - Database Operations
\Kotchasan\Model เป็น Base Class สำหรับ Model ทั้งหมด มี createQuery() method ที่ให้ QueryBuilder สำหรับสร้าง queries ที่ซับซ้อน
การสร้าง Model
namespace Index\Profile;
class Model extends \Kotchasan\Model
{
// Methods ของ Model
}static::createQuery() - QueryBuilder
ใช้สำหรับสร้าง SELECT, INSERT, UPDATE, DELETE queries แบบ fluent interface
SELECT - ดึงข้อมูล
จาก [profile.php] - ดึง 1 record:
public static function get($id)
{
return static::createQuery()
->select()
->from('user')
->where([['id', $id]])
->first();
}จาก [profile.php] - เลือก columns:
public static function view($id)
{
return static::createQuery()
->select('U.*')
->from('user U')
->where([['U.id', $id]])
->first();
}จาก [users.php] - Query for DataTable:
public static function toDataTable($params)
{
// Filters (AND conditions)
$where = [];
if (isset($params['status']) && $params['status'] !== '') {
$where[] = ['U.status', (int) $params['status']];
}
// สร้าง query
$query = static::createQuery()
->select(
'U.id',
'U.username',
'U.name',
'U.phone',
'U.status',
'U.active',
'U.social',
'U.create_date'
)
->from('user U')
->where($where);
// Search (OR condition)
if (!empty($params['search'])) {
$search = '%'.$params['search'].'%';
$where = [
['U.name', 'LIKE', $search],
['U.username', 'LIKE', $search],
['U.phone', 'LIKE', $search]
];
$query->where($where, 'OR');
}
return $query;
}จาก [users.php] - สำหรับ dropdown/select:
public static function toOptions($where = [])
{
return static::createQuery()
->select('id value', 'name text')
->from('user')
->where($where)
->orderBy('name')
->execute()
->fetchAll();
}จาก [category.php] - ดึงและประมวลผล:
public static function get($type)
{
$query = static::createQuery()
->select('category_id', 'topic', 'language')
->from('category')
->where([['type', $type]])
->execute();
$data = [];
foreach ($query->fetchAll() as $item) {
if (!isset($data[$item->category_id])) {
$data[$item->category_id]['id'] = $item->category_id;
}
$data[$item->category_id][$item->language] = $item->topic;
}
return array_values($data);
}SELECT - With Activation Check
จาก [register.php]:
$user = static::createQuery()
->select('id', 'activatecode', 'active')
->from('user')
->where([['id', $userId]])
->first();จาก [register.php]:
$user = static::createQuery()
->select('id', 'username', 'name', 'active', 'activatecode')
->from('user')
->where([['activatecode', $code]])
->first();QueryBuilder Methods
| Method | Description | Return |
|---|---|---|
select(...$columns) |
กำหนด columns ที่ต้องการ | QueryBuilder |
from($table) |
กำหนดตาราง | QueryBuilder |
where($conditions, $operator) |
เงื่อนไข ($operator = 'AND' หรือ 'OR') | QueryBuilder |
orderBy($column, $direction) |
เรียงลำดับ | QueryBuilder |
limit($limit, $offset) |
จำกัดจำนวน | QueryBuilder |
first() |
ดึง record แรก | object|null |
execute() |
Execute query | ResultInterface |
fetchAll() |
ดึงผลลัพธ์ทั้งหมด | array |
Where Conditions
// 1. แบบง่าย: [['field', 'value']]
->where([['id', 1]])
// 2. หลายเงื่อนไข (AND)
->where([
['status', 1],
['active', 1]
])
// 3. ใช้ operator
->where([
['U.name', 'LIKE', '%search%'],
['price', '>', 100]
])
// 4. OR conditions
->where($conditions, 'OR')Table Alias
static::createQuery()
->select('U.id', 'U.name', 'P.title')
->from('user U')
->where([['U.id', $id]])
->first();Model vs DB Utility
| Feature | static::createQuery() |
\Kotchasan\DB::create() |
|---|---|---|
| Use case | Complex queries, JOINs | Simple CRUD |
| Syntax | Fluent chain | Method call |
| Flexibility | สูง | ปานกลาง |
| ใช้ใน | Model classes | ทุกที่ |
ตัวอย่างความแตกต่าง:
// Model::createQuery() - สำหรับ complex queries
$users = static::createQuery()
->select('U.*', 'R.name role')
->from('user U')
->leftJoin('roles R', [['R.id', 'U.role_id']])
->where([['U.status', 1]])
->orderBy('U.name')
->execute()
->fetchAll();
// DB::create() - สำหรับ simple CRUD
$user = \Kotchasan\DB::create()->first('user', [['id', $id]]);Model Method Reference
Static Methods
| Method | Signature | Return |
|---|---|---|
createQuery |
createQuery() |
QueryBuilderInterface |
create |
create() |
static - Model instance |
createDb |
createDb() |
Database |
Instance Methods
| Method | Signature | Return |
|---|---|---|
select |
select(...$columns) |
SelectBuilder |
insert |
insert(string $table) |
InsertBuilder |
update |
update(string $table) |
UpdateBuilder |
delete |
delete(string $table) |
DeleteBuilder |
raw |
raw(string $sql, array $params) |
mixed |
lastInsertId |
lastInsertId() |
int\|string |
getDB |
getDB() |
Database |
getTableName |
getTableName(string $table) |
string |
getPrefix |
getPrefix() |
string |
beginTransaction |
beginTransaction() |
bool |
commit |
commit() |
bool |
rollback |
rollback() |
bool |
Instance Methods Usage
Model::create() - สร้าง Model Instance
$model = \Index\Users\Model::create();
$db = $model->getDB();Instance select/insert/update/delete
$model = new \Kotchasan\Model();
// Instance-level query builders
$selectBuilder = $model->select('id', 'name')->from('user');
$insertBuilder = $model->insert('user')->values([...]);
$updateBuilder = $model->update('user')->set([...])->where([...]);
$deleteBuilder = $model->delete('user')->where([...]);raw() - รัน SQL โดยตรง
$model = new \Kotchasan\Model();
$result = $model->raw(
'SELECT * FROM {prefix}user WHERE status = :status',
[':status' => 1]
);Transaction ใน Model
class OrderModel extends \Kotchasan\Model
{
public function createOrder($data, $items)
{
try {
$this->beginTransaction();
$this->insert('orders')
->values($data)
->execute();
$orderId = $this->db->lastInsertId();
foreach ($items as $item) {
$item['order_id'] = $orderId;
$this->insert('order_items')
->values($item)
->execute();
}
$this->commit();
return $orderId;
} catch (\Exception $e) {
$this->rollback();
throw $e;
}
}
}getTableName() / getPrefix()
$model = new \Kotchasan\Model();
// ได้ชื่อตารางพร้อม prefix เช่น "app_user"
$tableName = $model->getTableName('user');
// ได้ prefix เช่น "app"
$prefix = $model->getPrefix();คลาสที่เกี่ยวข้อง
- DB - Utility class สำหรับ simple CRUD
- QueryBuilder - QueryBuilder documentation