Examples

There are different query builder classes for each SQL query type: SelectBuilder, UpdateBuilder, DeleteBuilder and InsertBuilder. To create them we will use our factory:

$phuriaSQL = new \Phuria\SQLBuilder\PhuriaSQLBuilder();

Simple SELECT

$qb = $phuriaSQL->createSelect();

$qb->addSelect('u.name', 'c.phone_number');
$qb->from('user', 'u');
$qb->leftJoin('contact', 'c', 'u.id = c.user_id');

echo $qb->buildSQL();

Single table DELETE

$qb = $phuriaSQL->createDelete();

$qb->from('user');
$qb->andWhere('id = 1');

echo $qb->buildSQL();
DELETE FROM user WHERE id = 1;

Multiple table DELETE

$qb = $phuriaSQL->createDelete();

$qb->from('user', 'u');
$qb->innerJoin('contact', 'c', 'u.id = c.user_id')
$qb->addDelete('u', 'c');
$qb->andWhere('u.id = 1');

echo $qb->buildSQL();
DELETE u, c FROM user u LEFT JOIN contact c ON u.id = c.user_id WHERE u.id = 1

Simple INSERT

$qb = $phuriaSQL->createInsert();

$qb->into('user', 'u', ['username', 'email']);
$qb->addValues(['phuria', 'spam@simko.it']);

echo $qb->buildSQL();
INSERT INTO user (username, email) VALUES ("phuria", "spam@simko.it")

INSERT ... SELECT

$sourceQb = $phuriaSQL->createInsert();

$sourceQb->from('transactions', 't');
$sourceQb->addSelect('t.user_id', 'SUM(t.amount)');
$sourceQb->addGroupBy('t.user_id');

$targetQb = $phuriaSQL->createInsertSelect();
$targetQb->into('user_summary', ['user_id', 'total_price']);
$targetQb->selectInsert($sourceQb);

echo $targetQb->buildSQL();
INSERT INTO user_summary (user_id, total_price)
SELECT t.user_id, SUM(t.amount) FROM transactions AS t GROUP BY t.user_id

Simple UPDATE

$qb = $phuriaSQL->createUpdate();

$rootTable = $qb->update('user', 'u');
$qb->addSet("u.updated_at = NOW()");
$qb->andWhere("u.id = 1");

echo $qb->buildSQL();
UPDATE user AS u SET u.updated_at = NOW() WHERE u.id = 1

Advanced UPDATE

$sourceQb = $phuriaSQL->createSelect();
$sourceQb->addSelect('i.transactor_id');
$sourceQb->addSelect('SUM(i.gross) AS gross');
$sourceQb->addSelect('SUM(i.net) AS net');
$sourceQb->from('invoice', 'i');
$sourceQb->addGroupBy('i.transactor_id');

$qb = $phuriaSQL->update();

$qb->update('transactor_summary', 'summary');
$qb->innerJoin($sourceQb, 'source', 'summary.transactor_id = source.transactor_id');
$qb->addSet('summary.invoiced_gross = source.gross');
$qb->addSet('summary.invoiced_net = source.net');

echo $qb->buildSQL();
UPDATE transactor_summary AS summary INNER JOIN (...) AS source
SET summary.invoiced_gross = source.gross, summary.invoiced_net = source.net
$qb = $phuriaSQL->createUpdate();

$qb->update('players', 'p');
$qb->addSet('p.qualified = 1');
$qb->andWhere('p.league = 20');
$qb->addOrderBy('p.major_points DESC, p.minor_points DESC');
$qb->addLimit(20);

echo $qb->buildSQL();
UPDATE players AS p SET p.qualified = 1 WHERE p.league = 20
ORDER BY p.major_points DESC, p.minor_points DESC LIMIT 20