/** * @return array */ private function getData() { $columns = $this->prefixColumnsForFetch(array_keys($this->classMetadata->getProperties())); switch ($this->joinParameters['relation']) { case ClassMetadata::JOIN_ONE_TO_MANY: $where = sprintf("a.%s = %%s", $this->joinParameters['join']['referenceColumn']); return $this->manager->getDibiConnection()->select($columns)->from($this->classMetadata->getTable())->as('a')->where($where, DataHelperLoader::getPropertyValue($this->parent, $this->joinParameters['join']['column']))->fetchAll(); break; case ClassMetadata::JOIN_MANY_TO_MANY: $targetClassMetadata = $this->manager->createClassMetadata($this->joinParameters['entity']); return $this->manager->getDibiConnection()->select($columns)->from($targetClassMetadata->getTable())->as('a')->innerJoin($this->joinParameters['joiningTable'])->as('b')->on(sprintf('a.%s = b.%s', $this->joinParameters['joinSecondary']['referenceColumn'], $this->joinParameters['joinSecondary']['column']))->and('b.' . $this->joinParameters['joinPrimary']['referenceColumn'] . ' = %s', DataHelperLoader::getPropertyValue($this->parent, $this->joinParameters['joinPrimary']['column']))->fetchAll(); break; default: throw new \InvalidArgumentException(sprintf('Invalid join specified %s', $this->joinParameters['relation'])); } }