Quickstart
Get from zero to transpiling, parsing, and building in under five minutes.
1. Transpile SQL
use Kwasii\LaravelSqlParser\Facades\LaravelSqlParser as Sql;
// MySQL -> SQL Server
Sql::transpile('SELECT IFNULL(a, 1) FROM t LIMIT 5', from: 'mysql', to: 'tsql');
// ['SELECT TOP 5 COALESCE(a, 1) FROM t']
// Pretty-print the output
Sql::transpile('SELECT a, b FROM t', 'mysql', 'postgres', true);
// ["SELECT\n a,\n b\nFROM t"]
transpile() returns one string per statement. Omit from to use your configured default_dialect (or your default DB driver). Omit to to normalize in the same dialect.
2. Transpile a query builder
$query = User::where('email', 'like', '%@example.com')->orderBy('id');
$query->toSqlFor('sqlsrv');
// 'SELECT * FROM [users] WHERE [email] LIKE ? ORDER BY [id] ASC'
$query->toRawSqlFor('mysql');
// "SELECT * FROM `users` WHERE `email` LIKE '%@example.com' ORDER BY `id` ASC"
3. Parse and inspect
use Kwasii\LaravelSqlParser\Expressions\Column;
use Kwasii\LaravelSqlParser\Expressions\Table;
$select = Sql::parseOne(
'SELECT u.id, u.name FROM users AS u JOIN posts ON posts.user_id = u.id',
'mysql'
);
array_map(fn ($t) => $t->name(), $select->findAll(Table::class));
// ['users', 'posts']
$select->sql('postgres'); // regenerate for any dialect
4. Build queries fluently
use Kwasii\LaravelSqlParser\Expressions\Builder;
$query = Builder::select('id', 'name')
->from('users')
->where('active = 1')
->orderBy('name')
->limit(10);
$query->sql('tsql');
5. Optimize
use Kwasii\LaravelSqlParser\Optimizer\Optimizer;
Optimizer::optimize('SELECT a FROM x WHERE 1 + 1 = 2', schema: ['x' => ['a' => 'INT']])->sql();
Where next