Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Doctrine orm 原则2:是否可以使用多个列来定义与另一个实体的关联?_Doctrine Orm - Fatal编程技术网

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

Doctrine orm 原则2:是否可以使用多个列来定义与另一个实体的关联?,doctrine-orm,Doctrine Orm,用例如下:我有一个地址表,其中有一个fk_id字段和一个type字段。该表可以与其他几个表关联。例如,如果我想存储一个人的地址,我会将fk_id字段设置为person_id值,并将type字段设置为“person”。对于公司,我将fk_id设置为company_id值,并键入“company”。等等 如果我想在Person实体上定义一对一的关系,有可能吗?或者您绝对只需要两个表之间的直接关系吗?我怀疑是这样,但我想我会确定的 其次,如果不可能,是否有任何方法可以运行查询(使用DQL或QueryB

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

如果我想在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' }] }
]
->join('address', 'a', Join::ON, "p.person_id = a.fk_id AND a.type = 'person'")
我尝试使用查询生成器,问题是当我执行从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' }] }
]
->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'

有什么想法吗?

这个查询在本机SQL中是什么样子的?刚刚在本机SQL中添加了这个查询。你确定这个查询有效吗?好吧,如果你想给表添加别名,你必须使用AS关键字。是的,它很有效。不,别名表不需要AS关键字。