了解 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)。
我理解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)。