以下是用例:我有一个具有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'
有什么想法吗?