了解SQL别名

时间:2016-04-25 19:30:55

标签: mysql sql doctrine symfony-1.4 dql

我理解SQL别名的概念,但在下面的doctrine查询语言示例中,别名位于表名的前面,后面跟着它们。有人可以帮助解释这个查询中发生的事情吗?在尝试改变它之前,我想尝试更好地了解发生的事情。

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 个答案:

答案 0 :(得分:0)

正在发生的事情是您从一个驻留在扩展Doctrine_Table的类中的方法内部调用$this->createQuery()createQuery()方法接受一个参数$alias,并返回一个带有'来自'的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将自动确定外键。

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