我理解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();
}
答案 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)。