The siriusphp/sql
library is designed to help you build and execute SQL simple and complex queries in a fast and safe way.
The vocabulary is as close to SQL as possible as you may see from the example below:
use Atlas\Pdo\Connection;
use Sirius\Sql\Select;
use Sirius\Sql\ConditionsEnum;
$connection = Connection::new('sqlite::memory:');
$select = new Select($connection);
// find the 10 "cool" posts that are published and also retrieve the comments count
$select->distinct()
->columns('posts.*', 'COUNT(comments.id) AS comments_count')
->from('posts')
->join('LEFT', 'comments', 'comments.commentable_id = posts.id AND comments.commentable_type = %s', 'posts')
->where('posts.published_at < NOW()')
->where('posts.title', 'cool', ConditionsEnum::CONTAINS)
->groupBy('posts.id')
->limit(10);
$posts = $select->fectchAll();
This library is a derivative work of atlas/query. I made this library for 2 reasons:
- to reduce cognitive load by removing some methods and implementing other ways to achieve the same goals (eg: nested conditions)
- to optimize some operations for the most common scenarios (eg:
where($column, $str, 'does_not_contain')
vswhere($column . ' LIKE ', '%' . $str . '%')