Select query builder¶
Create a query¶
use Small\SwooleEntityManager\QueryBuilder\RelationalQueryBuilder\Enum\ConditionOperatorType;
use Small\SwooleEntityManager\QueryBuilder\RelationalQueryBuilder\Enum\OrderByDirectionType;
$query = $userManager->createQueryBuilder('user');
$query
->where()
->firstCondition(
$query->getFieldForCondition('enabled', 'user'),
ConditionOperatorType::equal,
':enabled',
)
->andCondition(
$query->getFieldForCondition('username', 'user'),
ConditionOperatorType::like,
':username',
);
$query
->setParameter('enabled', true)
->setParameter('username', 'seb%')
->addOrderBy('username', 'user', OrderByDirectionType::asc)
->paginate(page: 1, pageSize: 25);
$users = $userManager->getResult($query);
Use getFieldForCondition() rather than hard-coded SQL identifiers. It validates the field and resolves the selected alias.
Conditions¶
Supported operators are:
equal,notEqual;inferior,inferiorOrEqual,superior,superiorOrEqual;like,notLike,regex;isNull,isNotNull;exists,notExists;in,notIn.
Nested boolean groups are built with brackets:
$where = $query->where();
$where
->firstCondition($query->getFieldForCondition('enabled'), ConditionOperatorType::equal, true)
->andBracket()
->firstCondition($query->getFieldForCondition('role'), ConditionOperatorType::equal, 'admin')
->orCondition($query->getFieldForCondition('role'), ConditionOperatorType::equal, 'manager')
->endBracket();
Joins¶
Relations declared through #[ToOne] or #[ToMany] can be joined by alias:
$query = $projectManager
->createQueryBuilder('project')
->innerJoin('project', 'user', 'owner');
$query
->where()
->firstCondition(
$query->getFieldForCondition('username', 'owner'),
ConditionOperatorType::equal,
':username',
);
$query->setParameter('username', 'nadia');
Available join helpers are join(), innerJoin(), leftJoin() and rightJoin().
Additional join predicates are appended through joinCondition() on the returned join builder.
Limit, pagination and ordering¶
$query->limit(offset: 50, limit: 25);
$query->paginate(page: 3, pageSize: 25);
$query->addOrderBy('createdAt', 'user', OrderByDirectionType::desc);
$query->clearOrderBy();
Raw result¶
getRawResult() returns driver result-set objects. getResult() hydrates the configured entity collection.