原则2:是否可以使用多个列为连接定义与另一个实体的关联?

时间:2013-08-11 15:53:51

标签: doctrine-orm

以下是用例:我有一个具有fk_id字段和类型字段的Address表。该表可以与其他几个表相关。因此,例如,如果我想存储一个人的地址,我会将fk_id字段设置为person_id值,并将类型字段设置为“person”。对于公司,我将fk_id设置为company_id值并键入“company”。等等。

因此,如果我想在Person实体上定义一对一关系,是否可能?或者你绝对只需要两个表之间的直接关系?我怀疑是这样,但我想确定。

其次,如果不可能,有什么方法可以运行查询(使用DQL或QueryBuilder)以这样的格式检索Person和关联的Address实体:

[
    { person_id: 1, person_name: 'John', addresses: [{ address_id: 1, address_street: '1 Main St' }] },
    { person_id: 2, person_name: 'Tim', addresses: [{ address_id: 2, address_street: '2 Main St' }] }
]

我尝试使用查询构建器,问题是当我从Person到Address进行连接时,我会这样做:

->join('address', 'a', Join::ON, "p.person_id = a.fk_id AND a.type = 'person'")

我收到错误,显然是因为Join :: ON。如果我使用Join :: WITH,它工作正常,但后来我将电子邮件记录作为数组中的单独项目,这非常不方便。

以下是常规SQL中的查询内容:

SELECT *
FROM person p 
    INNER JOIN address a ON a.fk_id = p.person_id AND a.type = 'person'

有什么想法吗?

0 个答案:

没有答案