Skip to content

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

$rawRows = $userManager->getRawResult($query);
$entities = $userManager->getResult($query);

getRawResult() returns driver result-set objects. getResult() hydrates the configured entity collection.

Next chapter: Update builder