private static function getPairsAdvanced(EntityDao $dao, array $options) { $qb = $dao->createQueryBuilder('e')->select("e")->resetDQLPart('from')->from($dao->getClassName(), 'e', 'e.' . $options['key'])->autoJoinOrderBy((array) $options['orderBy']); foreach ($options['criteria'] as $key => $value) { if (is_numeric($key) && is_callable($value)) { $value($qb, 'e'); } else { $qb->whereCriteria([$key => $value]); } } $query = $qb->getQuery(); if (is_string($options['value'])) { $parts = explode('.', $options['value']); $callback = function ($value) use($parts) { foreach ($parts as $part) { $value = $value->{$part}; } return $value; }; } else { $callback = $options['value']; } $result = $query->getResult(); return array_map($callback, $result); }
/** * @return Entities\IProcess */ private function createProcessEntity() { $className = $this->dao->getClassName(); return new $className(); }