Пример #1
0
 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');
 }
Пример #2
0
 /**
  * @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;
 }
Пример #3
0
 /**
  * @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;
 }