0

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

所以如果我想在 Person 实体上定义一对一的关系,有可能吗?还是您绝对只需要两个表之间的直接关系?我怀疑是这样,但我想我会确定的。

其次,如果不可能,有什么方法可以运行查询(使用 DQL 或 QueryBuilder)来检索人员和相关的地址实体,格式如下:

[
    { 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'

有任何想法吗?

4

0 回答 0