public function preloadEdges(ResultProxy $resultProxy) { $nodesIds = array(); foreach ($resultProxy as $node) { $nodesIds[$node['id']] = true; } $edges = $this->connection->select('*')->from('edge')->where('[source] IN %in OR [target] IN %in', $ids = array_keys($nodesIds), $ids)->orderBy('type')->fetchAll(); $referencing = Result::createInstance(array(), 'edge', $this->connection, $this->mapper); foreach ($edges as $edge) { if (isset($nodesIds[$edge['source']]) || isset($nodesIds[$edge['target']])) { $edge = $edge->toArray(); $edge['related_node'] = $edge['source']; $referencing->addDataEntry($edge); if ($edge['target'] !== $edge['source'] and $edge['target'] !== null) { $edge['related_node'] = $edge['target']; $referencing->addDataEntry($edge); } } } $referencing->cleanAddedAndRemovedMeta(); $resultProxy->setReferencingResult($referencing, 'edge', 'related_node'); }
/** * @return Fluent */ protected function createFluent() { $table = $this->getTable(); $statement = $this->connection->select('%n.*', $table)->from($table); $filters = $this->mapper->getImplicitFilters($this->mapper->getEntityClass($table), new Caller($this)); if (!empty($filters)) { $funcArgs = func_get_args(); if (!$filters instanceof ImplicitFilters) { $filters = new ImplicitFilters($filters); } $targetedArgs = $filters->getTargetedArgs(); foreach ($filters->getFilters() as $filter) { $args = [$filter]; if (is_string($filter) and array_key_exists($filter, $targetedArgs)) { $args = array_merge($args, $targetedArgs[$filter]); } if (!empty($funcArgs)) { $args = array_merge($args, $funcArgs); } call_user_func_array([$statement, 'applyFilter'], $args); } } return $statement; }
/** * @param string $table * @param array $relatedKeys * @return Fluent */ private function createTableSelection($table, $relatedKeys = null) { $selection = $this->connection->select('%n.*', $table)->from('%n', $table); return $relatedKeys !== null ? $selection->setRelatedKeys($relatedKeys) : $selection; }