2016-04-25 2 views
1

Я понимаю концепцию псевдонимов SQL, но в следующем примере языка запросов доктрины псевдоним находится перед именами таблиц, а также за ними. Может кто-нибудь помочь объяснить, что происходит в этом запросе? Я хочу попытаться лучше понять, что происходит до того, как я попытаюсь изменить его.Понимание псевдонимов SQL

public function getByDomain($domain) 
    { 
    return $this->createQuery('d')->select('d.*, c.*, p.*, cl.*') 
      ->innerJoin('d.Table1 c') 
      ->innerJoin('c.Table2 p')->innerJoin('c.Table3 cl') 
      ->where('d.name=?',$domain)->fetchOne(); 
    } 
+1

Я думаю, что часть перед именем «table» - это имя базы данных, а не псевдоним. –

+0

Но все они существуют в одном и том же двоичном разряде, а часть перед именем таблицы не остается постоянной. @GordonLinoff –

+0

Вы уверены, что они находятся в одной базе данных? Обычно 'a.b' означает базу данных' a', таблицу 'b' в этом контексте. – tadman

ответ

0

Что происходит, что вы вызываете $this->createQuery() из внутри метода, который находится в классе, который простирается Doctrine_Table. Метод createQuery() принимает один параметр $alias и возвращает объект Doctrine_Query с автоматически добавленным «from» (поэтому в заявлении нет ->from()).

Полный код, вероятно, выглядит следующим образом:

class DomainTable extends Doctrine_Table 
{ 
    public function getByDomain($domain) 
    { 
    return $this->createQuery('d')->select('d.*, c.*, p.*, cl.*') 
      ->innerJoin('d.Table1 c') 
      ->innerJoin('c.Table2 p')->innerJoin('c.Table3 cl') 
      ->where('d.name=?',$domain)->fetchOne(); 
    } 
} 

В Доктрине, псевдоним может быть использован перед другими названиями моделей, которые вы хотите, чтобы выполнить объединение дальше. Doctrine автоматически определяет внешние ключи, если у вас есть правильные отношения, определенные в файлах схемы.

Таким образом, этот код выбирает все столбцы из домена, таблицы1, таблицы2 и таблицы3, где столбец Domain.name соответствует $ domain и возвращает только 1 результат (LIMIT 1).

Смежные вопросы