alias() public method

Get or Set a unique alias for the query or a query's relation if $relpath is set.
public alias ( mixed $alias = true, string $relpath = null ) : string
$alias mixed The value of the alias to set for the passed `$relpath`. For getting an alias value set alias to `true`.
$relpath string A dotted relation name or `null` for identifying the query's model.
return string An alias value or `null` for an unexisting `$relpath` alias.
Example #1
0
 public function testAliasAndPaths()
 {
     $model = 'lithium\\tests\\mocks\\data\\model\\MockQueryComment';
     $query = new Query(compact('model'));
     $this->assertIdentical('MockQueryComment', $query->alias());
     $this->assertIdentical('MockQueryComment', $query->alias(true));
     $this->assertIdentical('MockQueryComment2', $query->alias('MockQueryComment2'));
     $this->assertIdentical('MockQueryComment2', $query->alias());
     $this->assertIdentical('MockQueryComment2', $query->alias(true));
     $this->assertIdentical('MockQueryComment__2', $query->alias('MockQueryComment', 'Model1'));
     $this->assertIdentical('MockQueryComment2__2', $query->alias('MockQueryComment2', 'Model2'));
     $this->assertIdentical('MockQueryComment__2', $query->alias(true, 'Model1'));
     $this->assertIdentical('MockQueryComment2__2', $query->alias(true, 'Model2'));
     $query = new Query(compact('model') + array('source' => 'my_custom_table', 'alias' => 'MyCustomAlias'));
     $result = $query->export($this->db);
     $this->assertIdentical('{my_custom_table}', $result['source']);
     $this->assertIdentical('AS {MyCustomAlias}', $result['alias']);
     $this->assertIdentical('MyCustomAlias__2', $query->alias('MyCustomAlias', 'Relation1'));
     $this->assertIdentical('MyCustomAlias__3', $query->alias('MyCustomAlias', 'Other.Relation2'));
     $this->assertIdentical('MyCustomAlias2', $query->alias('MyCustomAlias2', 'Other.Other.Relation3'));
     $this->assertIdentical('MyCustomAlias', $query->alias());
     $this->assertIdentical('MyCustomAlias__2', $query->alias(true, 'Relation1'));
     $this->assertIdentical('MyCustomAlias__3', $query->alias(true, 'Other.Relation2'));
     $this->assertIdentical('MyCustomAlias2', $query->alias(true, 'Other.Other.Relation3'));
     $this->assertIdentical('Relation4', $query->alias(null, 'Relation4'));
     $this->assertIdentical('Relation5', $query->alias(null, 'Other.Relation5'));
     $this->assertIdentical('Relation5__2', $query->alias(null, 'Other.Other.Relation5'));
     $this->assertIdentical('Relation4', $query->alias(true, 'Relation4'));
     $this->assertIdentical('Relation5', $query->alias(true, 'Other.Relation5'));
     $this->assertIdentical('Relation5__2', $query->alias(true, 'Other.Other.Relation5'));
     $expected = array('MyCustomAlias' => null, 'MyCustomAlias__2' => 'Relation1', 'MyCustomAlias__3' => 'Other.Relation2', 'MyCustomAlias2' => 'Other.Other.Relation3', 'Relation4' => 'Relation4', 'Relation5' => 'Other.Relation5', 'Relation5__2' => 'Other.Other.Relation5');
     $this->assertEqual($expected, $query->paths($this->db));
     $model = 'lithium\\tests\\mocks\\data\\model\\MockQueryPost';
     $query = new Query(compact('model'));
     $query->alias(null, 'MockQueryComment');
     $query->alias('MockQueryPost2', 'MockQueryComment.MockQueryPost');
     $expected = array('MockQueryPost' => null, 'MockQueryComment' => 'MockQueryComment', 'MockQueryPost2' => 'MockQueryComment.MockQueryPost');
     $this->assertEqual($expected, $query->paths($this->db));
 }
Example #2
0
 public function testAutomaticAliasing()
 {
     $query = new Query(array('model' => $this->_model));
     $this->assertEqual('MockQueryPost', $query->alias());
 }
Example #3
0
 /**
  * Helper method for `data\model\Database::shema()`
  *
  * @param \lithium\data\model\Query $query A Query instance.
  * @param array|null $fields Array of formatted fields.
  * @return array
  */
 protected function _schema($query, $fields = null)
 {
     $model = $query->model();
     $paths = $query->paths($this);
     $models = $query->models($this);
     $alias = $query->alias();
     $result = array();
     if (!$model) {
         foreach ($fields as $field => $value) {
             if (is_array($value)) {
                 $result[$field] = array_keys($value);
             } else {
                 $result[''][] = $field;
             }
         }
         return $result;
     }
     if (!$fields) {
         foreach ($paths as $alias => $relation) {
             $model = $models[$alias];
             $result[$relation] = $model::schema()->names();
         }
         return $result;
     }
     $unalias = function ($value) {
         if (is_object($value) && isset($value->scalar)) {
             $value = $value->scalar;
         }
         $aliasing = preg_split("/\\s+as\\s+/i", $value);
         return isset($aliasing[1]) ? $aliasing[1] : $value;
     };
     if (isset($fields[0])) {
         $raw = array_map($unalias, $fields[0]);
         unset($fields[0]);
     }
     $fields = isset($fields[$alias]) ? array($alias => $fields[$alias]) + $fields : $fields;
     foreach ($fields as $field => $value) {
         if (is_array($value)) {
             if (isset($value['*'])) {
                 $relModel = $models[$field];
                 $result[$paths[$field]] = $relModel::schema()->names();
             } else {
                 $result[$paths[$field]] = array_map($unalias, array_keys($value));
             }
         }
     }
     if (isset($raw)) {
         $result[''] = isset($result['']) ? array_merge($raw, $result['']) : $raw;
     }
     return $result;
 }