Kotchasan Framework Documentation

Kotchasan Framework Documentation

QueryBuilder Functions

TH 05 Feb 2026 06:23

QueryBuilder Functions

โฟลเดอร์ Kotchasan/QueryBuilder/Functions/ มี function builders สำหรับแต่ละ database

โครงสร้าง

QueryBuilder/Functions/
├── SQLFunctionBuilderInterface.php  # Interface
├── AbstractSQLFunctionBuilder.php   # Base class
├── MySQLFunctionBuilder.php         # MySQL specific
├── PostgreSQLFunctionBuilder.php    # PostgreSQL specific
├── SQLiteFunctionBuilder.php        # SQLite specific
├── SQLServerFunctionBuilder.php     # SQL Server specific
├── FunctionBuilderFactory.php       # Factory
└── JSONFunctions.php                # JSON functions

SQLFunctionBuilderInterface

Interface สำหรับ function builders ทั้งหมด

interface SQLFunctionBuilderInterface
{
    public function year(string $column, ?string $alias = null): string;
    public function month(string $column, ?string $alias = null): string;
    public function day(string $column, ?string $alias = null): string;
    public function dateFormat(string $column, string $format, ?string $alias = null): string;
    public function now(?string $alias = null): string;
    public function concat(array $parts, ?string $alias = null): string;
    public function ifNull(string $column, $default, ?string $alias = null): string;
    public function cast(string $column, string $type, ?string $alias = null): string;
    // ... more methods
}

FunctionBuilderFactory

สร้าง function builder ตาม database type

use Kotchasan\QueryBuilder\Functions\FunctionBuilderFactory;

$builder = FunctionBuilderFactory::create('mysql');    // MySQLFunctionBuilder
$builder = FunctionBuilderFactory::create('pgsql');    // PostgreSQLFunctionBuilder
$builder = FunctionBuilderFactory::create('sqlite');   // SQLiteFunctionBuilder
$builder = FunctionBuilderFactory::create('sqlsrv');   // SQLServerFunctionBuilder

Database-Specific Functions

YEAR()

Database SQL Output
MySQL YEAR(column)
PostgreSQL EXTRACT(YEAR FROM column)
SQLite strftime('%Y', column)
SQL Server YEAR(column)

DATE_FORMAT()

Database SQL Output
MySQL DATE_FORMAT(column, '%Y-%m-%d')
PostgreSQL TO_CHAR(column, 'YYYY-MM-DD')
SQLite strftime('%Y-%m-%d', column)
SQL Server FORMAT(column, 'yyyy-MM-dd')

NOW()

Database SQL Output
MySQL NOW()
PostgreSQL NOW()
SQLite datetime('now')
SQL Server GETDATE()

CONCAT()

Database SQL Output
MySQL CONCAT(a, b, c)
PostgreSQL a || b || c
SQLite a || b || c
SQL Server CONCAT(a, b, c)

IFNULL()

Database SQL Output
MySQL IFNULL(column, default)
PostgreSQL COALESCE(column, default)
SQLite IFNULL(column, default)
SQL Server ISNULL(column, default)

JSONFunctions

สำหรับ JSON operations

use Kotchasan\QueryBuilder\Functions\JSONFunctions;

// Extract JSON value
JSONFunctions::jsonExtract('data', '$.name', 'name');

// Create JSON object
JSONFunctions::jsonObject(['name' => 'value']);

// JSON array contains
JSONFunctions::jsonContains('tags', 'value');

การใช้งานกับ QueryBuilder

Framework จะเลือก function builder ให้อัตโนมัติตาม connection:

use Kotchasan\Database\Sql;

// Sql class ใช้ function builders ภายใน
// SQL ที่สร้างจะถูกต้องตาม database ที่ใช้

$query = Model::createQuery()
    ->select(
        'id',
        Sql::YEAR('created_at', 'year'),      // ใช้ MySQL: YEAR(), PostgreSQL: EXTRACT()
        Sql::DATE_FORMAT('created_at', '%Y-%m-%d', 'date')
    )
    ->from('orders');

คลาสที่เกี่ยวข้อง