protected function join(QueryBuilder $qb, $add = false) { $qb->innerjoin('user.user', 'securityUser'); $qb->leftjoin('user.activities', 'activities'); $qb->leftjoin('user.assignedAccount', 'assignedAccount'); $qb->leftjoin('assignedAccount.end', 'assignedAccount_end'); $qb->leftjoin('user.agencies', 'agencies'); $qb->leftjoin('agencies.agency', 'agency'); $qb->leftjoin('agencies.end', 'agencies_end'); if ($add) { $qb->addSelect('securityUser'); $qb->addSelect('assignedAccount'); $qb->addSelect('agencies'); $qb->addSelect('agency'); $qb->addSelect('agencies_end'); $qb->addSelect('assignedAccount_end'); } return $qb; }
/** * Hydrate query * * @param QueryBuilder $query * * @return QueryBuilder */ private function hydrateQuery($query) { foreach ($this->joins as $join) { $query->innerjoin($join['relation'] . ' ' . $join['alias'], $join['on']); } foreach ($this->wheres as $where) { if ($where['type'] == null) { $query->andWhere($where['alias'] . '.' . $where['property'] . ' = :v' . $this->index)->setParameter('v' . $this->index, $where['value']); } else { switch ($where['type']) { case 'LIKE': $query->andWhere($where['alias'] . '.' . $where['property'] . ' LIKE :v' . $this->index)->setParameter('v' . $this->index, '%' . $where['value'] . '%'); break; case 'OR_LIKE': $expr = $query->expr()->orX(); foreach ($where['property'] as $property) { $expr->add($query->expr()->like($property['property'], ':v' . $this->index)); $query->setParameter('v' . $this->index, $property['value']); $this->index++; } $query->andWhere($expr); break; case 'MIN': $query->andWhere($where['alias'] . '.' . $where['property'] . ' >= :v' . $this->index)->setParameter('v' . $this->index, '%' . $where['value'] . '%'); break; } } $this->index++; } return $query; }