【发布时间】:2012-01-23 19:22:25
【问题描述】:
我正在尝试将 5 个对象与 Doctrine2 (PHP) 关联起来。 我正在使用 PostgreSQL。
这是数据库架构: Database schema
一家公司可能有很多 Hub,每个 Hub 有一个 Harbor。 一个公司可能有很多 Line,每条 Line 都有一个 Linelist。 一个 Linelist 有 2 个港口。 例如,Linelist 是“Los Angeles-Seattle”,由于 Line 表,多个公司可能拥有它。
我正在尝试查询一家公司的所有 Hub、Harbor、Linelist 和 Line。 我有 SQL 查询:
SELECT *
FROM hub h
JOIN harbor a
ON a.id = h.harbor_id
JOIN linelist l
ON (l.harborstart_id = a.id OR l.harborend_id = a.id)
JOIN line m
ON m.linelist_id = l.id
WHERE h.company_id = 41
AND m.company_id = 41"
我正在尝试使用 DQL 来做同样的事情。 我试过了,但它不起作用:
$query = $this->getEntityManager()
->createQuery('SELECT h, a, l, m
FROM AmGameBundle:Hub h
JOIN h.harbor a
JOIN a.linelist l
JOIN l.line m
WHERE h.company = :company_id
AND m.company = :company_id')
->setParameter('company_id', $company_id);
因此,我只有 LineList 和 Line 对象与harborstart_id 匹配,但我想要匹配harborstart_id 或harborend_id 的对象。
您认为这在 DQL 中可行吗? 将 Harbor 和 Linelist 之间的关系更改为多对多可能会更好?
【问题讨论】:
标签: php database postgresql doctrine-orm