public function testFixture() { $this->tags = Helper::reindex($this->getRepository('Psc\\Doctrine\\TestEntities\\Tag')->findAll(), 'label'); $this->assertEquals(5, $this->tags['Wahl']->getIdentifier()); $this->assertEquals(2, $this->tags['Demonstration']->getIdentifier()); $this->assertEquals(1, $this->tags['Russland']->getIdentifier()); }
/** * @return Doctrine\Common\Collections\Collection */ public function collection(array $identifiers, $reindex = NULL, $checkCardinality = TRUE, &$found = NULL) { $idname = $reindex ?: 'id'; $entities = $this->byList($identifiers, $idname, $checkCardinality, $found); if ($reindex !== NULL) { $entities = Helper::reindex($entities, $reindex); } return $entities; }
protected function expectRepositoryPersists($entity, $times = NULL) { if (is_array($entity)) { $entities = \Psc\Doctrine\Helper::reindex($entity); $this->repository->expects($times ?: $this->exactly(count($entities)))->method('persist')->will($this->returnCallback(function (\Psc\CMS\Entity $entity) use($entities) { return $entities[$entity->getIdentifier()]; })); } else { $this->repository->expects($times ?: $this->once())->method('persist')->with($this->equalTo($entity))->will($this->returnSelf()); } }
/** * expectedException \Psc\System\Exception */ public function testReindex() { $expected = array(); foreach ($this->collection as $o) { $expected[$o->getId()] = $o; } $reindexed = DoctrineHelper::reindex($this->collection, 'getId'); $this->assertEquals($expected, $reindexed); /* Referenzen */ unset($this->collection[0]); $this->collection[1]->setId(9999999); $this->assertNotEquals($expected, $this->collection); $this->assertEquals($expected, $reindexed); }
public function findAllIndexByEmail() { return DoctrineHelper::reindex($this->findAll(), 'getEmail'); }
/** * Gibt alle persisten Instanzen eines Entities zurück und reindeziert wenn gewünscht * * @param string $entity der Name des Entities * @param string $reindex der Name des Getters oder der Getter nachdem die Liste indiziert werden soll (keys) * @return array */ public function hydrateAll($entity, $reindex = NULL) { $entities = $this->getRepository($entity)->findAll(); if ($reindex !== NULL) { $entities = DoctrineHelper::reindex($entities, $reindex); } return $entities; }
/** * Verändert die aktuelle Reihenfolge der Componenten * * $sorting kann entweder ein Closure sein welches als Parameter 2 Komponenten bekommt und dann entscheidet welche weiter vorne stehen soll. * oder ein array von property Names. Diese werden dann in der Reihenfolge wie im Array gesetzt, alle restlichen (nicht im array angegebenen) Componenten werden ans Ende gehängt * @param Closure|array $sorting kann ein Array von property-Names sein oder eine Closure die 2 Parameter erhält und eine Sortierfunktion ist returns: -1|0|1 */ public function sortComponents($sorting) { if (is_array($sorting)) { $order = array_flip($sorting); // $name => $position // wir erstellen unseren name => componenten index $components = \Psc\Doctrine\Helper::reindex($this->components->toArray(), 'getFormName'); // wir fügen alle Komponenten hinzu, die nicht in dem Index drin sind (hängen sie nach hinten an) foreach ($components as $name => $component) { if (!array_key_exists($name, $order)) { $order[$name] = count($order); } } $sorting = function ($c1, $c2) use($order) { // @TODO formName kann auch ein array sein? if (($n1 = $c1->getFormName()) === ($n2 = $c2->getFormName())) { return 0; } return $order[$n1] > $order[$n2] ? 1 : -1; }; } if (!$sorting instanceof \Closure) { throw new \InvalidArgumentException('sortComponents muss eine Closure als Parameter haben (oder ein Array)'); } $this->components->sortBy($sorting); return $this; }
/** * @return CoMun\Entities\ContentStream[] */ public function getContentStreamsByLocale($revision = 'default') { return \Psc\Doctrine\Helper::reindex($this->getContentStreamsByRevision($revision), 'locale'); }
/** * Dynamic Index * * Laufzeit O(2*n) und Queries O(1) (nur benötigte im Datenspeicher, dafür komplexeres query (allerdings nach unique-index)) * * Vorteile: * speicher-effizient wenn nicht alle Objekte aus der Tabelle geladen werden müssen * soft-fail für ids möglich wenn man mit OR und DQL selected, auswertung jedoch komplizierter ( und Laufzeit O((2+uniques)*n) * * Nachteile: * geht nicht für unique-kriterien die aus mehreren Spalten bestehen (denn das geht nicht mit findby), höchstens mit DQL und string verkettung - das würde aber ein where auf einem nicht-index bedeuten, etc * */ protected function hydrateTagsDynamicSelect(array $tagNames) { $toCollection = array(); $avaibleTags = \Psc\Doctrine\Helper::reindex($this->tagRepository->findBy(array('name' => $tagNames)), 'label'); foreach ($tagNames as $tagName) { if (array_key_exists($name, $indexTags)) { $toCollection[] = $indexTags[$name]; } else { $toCollection[] = new Tag($name); } } }
public function getLinksByHoster() { return DoctrineHelper::reindex($this->getLinks()->toArray(), 'hoster'); }