コード例 #1
0
 /**
  * Add a table to the query.
  *
  * This is an advanced concept; not only does it add a new instance of the table,
  * but it follows the relationship path all the way down to the relationship
  * link point and adds *that* as a new relationship and then adds the table to
  * the relationship, if necessary.
  */
 public function addTable($join = NULL, $alias = NULL)
 {
     // This is used for lookups in the many_to_one table.
     $field = $this->handler->relationship . '_' . $this->handler->table . '.' . $this->handler->field;
     if (empty($join)) {
         $join = $this->getJoin();
     }
     // See if there's a chain between us and the base relationship. If so, we need
     // to create a new relationship to use.
     $relationship = $this->handler->relationship;
     // Determine the primary table to seek
     if (empty($this->handler->query->relationships[$relationship])) {
         $base_table = $this->handler->view->storage->get('base_table');
     } else {
         $base_table = $this->handler->query->relationships[$relationship]['base'];
     }
     // Cycle through the joins. This isn't as error-safe as the normal
     // ensurePath logic. Perhaps it should be.
     $r_join = clone $join;
     while ($r_join->leftTable != $base_table) {
         $r_join = HandlerBase::getTableJoin($r_join->leftTable, $base_table);
     }
     // If we found that there are tables in between, add the relationship.
     if ($r_join->table != $join->table) {
         $relationship = $this->handler->query->addRelationship($this->handler->table . '_' . $r_join->table, $r_join, $r_join->table, $this->handler->relationship);
     }
     // And now add our table, using the new relationship if one was used.
     $alias = $this->handler->query->addTable($this->handler->table, $relationship, $join, $alias);
     // Store what values are used by this table chain so that other chains can
     // automatically discard those values.
     if (empty($this->handler->view->many_to_one_tables[$field])) {
         $this->handler->view->many_to_one_tables[$field] = $this->handler->value;
     } else {
         $this->handler->view->many_to_one_tables[$field] = array_merge($this->handler->view->many_to_one_tables[$field], $this->handler->value);
     }
     return $alias;
 }
コード例 #2
0
ファイル: Sql.php プロジェクト: jthoresen/PladsenDrupal
 /**
  * Retrieve join data from the larger join data cache.
  *
  * @param $table
  *   The table to get the join information for.
  * @param $base_table
  *   The path we're following to get this join.
  *
  * @return \Drupal\views\Plugin\views\join\JoinPluginBase
  *   A Join object or child object, if one exists.
  */
 public function getJoinData($table, $base_table) {
   // Check to see if we're linking to a known alias. If so, get the real
   // table's data instead.
   if (!empty($this->tableQueue[$table])) {
     $table = $this->tableQueue[$table]['table'];
   }
   return HandlerBase::getTableJoin($table, $base_table);
 }
コード例 #3
0
ファイル: ArgumentPluginBase.php プロジェクト: shumer/blog
 /**
  * Add the name field, which is the field displayed in summary queries.
  * This is often used when the argument is numeric.
  */
 protected function summaryNameField()
 {
     // Add the 'name' field. For example, if this is a uid argument, the
     // name field would be 'name' (i.e, the username).
     if (isset($this->name_table)) {
         // if the alias is different then we're probably added, not ensured,
         // so look up the join and add it instead.
         if ($this->tableAlias != $this->name_table) {
             $j = HandlerBase::getTableJoin($this->name_table, $this->table);
             if ($j) {
                 $join = clone $j;
                 $join->leftTable = $this->tableAlias;
                 $this->name_table_alias = $this->query->addTable($this->name_table, $this->relationship, $join);
             }
         } else {
             $this->name_table_alias = $this->query->ensureTable($this->name_table, $this->relationship);
         }
     } else {
         $this->name_table_alias = $this->tableAlias;
     }
     if (isset($this->name_field)) {
         $this->name_alias = $this->query->addField($this->name_table_alias, $this->name_field);
     } else {
         $this->name_alias = $this->base_alias;
     }
 }