了解 SQL 别名

Understanding SQL Aliases

我理解SQL别名的概念,但在下面的学说查询语言示例中,别名在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_Table 的 class 中的方法内部调用 $this->createQuery()createQuery() 方法接受一个参数 $alias,而 returns 一个自动添加了 'from' 的 Doctrine_Query 对象(这就是为什么没有 ->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 中,别名可以用在你想要执行连接的其他模型名称前面。如果您在模式文件中定义了正确的关系,Doctrine 将自动确定外键。

因此此代码选择域、Table1、Table2 和 Table3 中的所有列,其中 Domain.name 列与 $domain 匹配,并且只有 returns 1 个结果(LIMIT 1)。