Kotchasan Framework Documentation
QueryBuilder Functions
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 functionsSQLFunctionBuilderInterface
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'); // SQLServerFunctionBuilderDatabase-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');คลาสที่เกี่ยวข้อง
- SQL Functions - SQL helper
- QueryBuilder - Query building