Kotchasan Framework Documentation
Kotchasan\QueryBuilder\SelectBuilder
Kotchasan\QueryBuilder\SelectBuilder
SelectBuilder สร้างคำสั่ง SELECT ด้วย fluent interface
การใช้งาน
use Kotchasan\Database;
$db = Database::create();
// SELECT พื้นฐาน
$users = $db->select('*')
->from('users')
->fetchAll();
// SELECT พร้อมเงื่อนไข
$users = $db->select('id', 'name', 'email')
->from('users')
->where(['status', 'active'])
->orderBy('name')
->limit(10)
->fetchAll();เมธอดหลัก
select()
->select('*') // ทุกคอลัมน์
->select('id', 'name', 'email') // บางคอลัมน์
->select(['id', 'name']) // แบบ arrayfrom()
->from('users')
->from('users U')distinct()
->distinct() // SELECT DISTINCTwhere() / orWhere()
->where(['status', 'active'])
->where(['age', '>', 18])
->orWhere(['role', 'admin'])join() / leftJoin() / rightJoin()
->join('orders O', 'users.id = O.user_id')
->leftJoin('profiles P', 'users.id = P.user_id')
->rightJoin('addresses A', 'users.id = A.user_id')groupBy() / having()
->groupBy('category')
->having('COUNT(*)', '>', 5)orderBy()
->orderBy('name')
->orderBy('created_at', 'DESC')limit()
->limit(10)
->limit(10, 20)ตัวอย่าง
Query แบบซับซ้อน
use Kotchasan\Database;
$products = $db->select('p.id', 'p.name', 'c.name AS category', 'COUNT(o.id) AS order_count')
->from('products p')
->leftJoin('categories c', 'p.category_id = c.id')
->leftJoin('order_items o', 'p.id = o.product_id')
->where(['p.status', 'active'])
->groupBy('p.id')
->having('order_count', '>', 10)
->orderBy('order_count', 'DESC')
->limit(20)
->fetchAll();Subquery ใน SELECT
use Kotchasan\Database;
use Kotchasan\Database\Sql;
$subquery = $db->select('user_id', [Sql::SUM('amount'), 'total'])
->from('orders')
->groupBy('user_id');
$users = $db->select('u.name', [$subquery, 'total'])
->from('users u')
->fetchAll();การดู SQL (Debugging)
// สร้าง SQL โดยไม่ execute
$conn = new \Kotchasan\Connection\Connection(new \Kotchasan\Connection\MySQLDriver());
$qb = new \Kotchasan\QueryBuilder\SelectBuilder($conn);
$sql = $qb->select('*')
->from('users')
->where(['status', 1])
->toSql();
// ผลลัพธ์: SELECT * FROM `users` WHERE (`status` = :qb_p0)ข้อควรระวัง
- อย่าส่ง input ผู้ใช้เข้า raw SQL โดยตรง
- ใช้ parameter binding แทนการต่อ string
- ใช้ Sql::column() เมื่อจำเป็นต้องอ้างอิงคอลัมน์