我需要使用 Symfony 1.4/Propel 1.4 进行自我加入。我的表/数据库太大而无法放在这里,但下面给出了一个示例表来复制我面临的问题。
考虑以下带有示例数据的示例表
Table Employee
----------------------------------------
|id | name | mid |
----------------------------------------
|1 | CEO |NULL |
|2 | CTO |1 |
|3 | CFO |1 |
|4 | PM1 |2 |
|5 | TL1 |4 |
----------------------------------------
这里第一列是员工,第二列是员工姓名,第三列是经理 ID。mid 链接到同一张表中的另一行。例如,CTO(2) 向 CEO(1) 汇报,所以第二行中间是 1。
我需要以下输出:
---------------------
|ename | manager |
---------------------
|CTO | CEO |
|CFO | CEO |
|PM1 | CTO |
|TL1 | PM1 |
---------------------
SQL 查询将是:
SELECT e.name,m.name
FROM employee e, employee m
WHERE e.mid=m.id
AND e.mid NOT NULL;
我的问题是,如何在 Symfony/Propel 1.4 中编写相同的查询?我尝试关注
$c = new Criteria();
$c->clearSelectColumns();
$c->addSelectColumn(EmployeePeer::NAME.' as ename');
$c->addSelectColumn(EmployeePeer::NAME.' as manager');
$c->setPrimaryTableName(EmployeePeer::TABLE_NAME);
$c->addJoin(EmployeePeer::MID, EmployeePeer::ID, Criteria::INNER_JOIN);
$c->add(EmployeePeer::MID, NULL, Criteria::EQUAL);
即使我知道这个查询没有任何意义,并且按照我的预期,我得到了 PropelException。
但是自连接是常见的数据库操作之一,我相信 Propel 必须支持它。有人可以告诉如何在 Symfony/Propel 1.4 中实现上述要求