我正在使用Symfony3和Doctrine2进行项目。该项目旨在跟踪哪个志愿者计划为非营利组织举办哪些活动。
他们接受人或公司赞助他们的活动并拥有一个系统。
我有6张桌子:
sponsor_relations 表格具有以下结构:
CREATE TABLE `sponsor_relations` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`event_id` int(10) unsigned NOT NULL,
`season_id` int(10) unsigned DEFAULT NULL,
`sponsor_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `sponsor` (`sponsor_id`,`season_id`,`event_id`,`deleted`),
CONSTRAINT `fk1` FOREIGN KEY (`event_id `) REFERENCES `events` (`id`),
CONSTRAINT `fk2` FOREIGN KEY (`season_id`) REFERENCES `seasons` (`id`),
CONSTRAINT `fk3` FOREIGN KEY (`sponsor_id`) REFERENCES `sponsors` (`id`)
) ENGINE=InnoDB;
我写了一个查询列出哪个负责组织哪个组织。结果正是我想要的。到目前为止,一切都很完美。
以下是查询:
SELECT
v.id,
v.name,
vor.id AS volunteer_event_relation_id,
s.id AS season_id,
s.season_name,
e.id AS event_id,
e.event_name,
sp.id AS sponsor_id,
sp.sponsor_name
FROM
volunteer AS v
INNER JOIN
volunteer_event_relations AS vor ON vor.volunteer_id = v.id
INNER JOIN
seasons AS s ON s.id = vor.season_id
INNER JOIN
events AS e ON e.id = vor.event_id
LEFT JOIN
sponsor_relations AS sr ON sr.event_id = e.id AND sr.season_id = s.id
LEFT JOIN
sponsors AS sp ON sp.id = sr.sponsor_id
WHERE
v.id = 1
ORDER BY
s.season_start ASC;
我使用 ResultSetMapping()类将结果映射到我的实体。当我使用console命令( console doctrine:schema:validate )时,没有给出任何错误,因此实体没有问题。
当只有一个关系时,很容易映射;关于那一个有很多例子。但是, sponsor_relations 表的每一行都依赖于3个不同表的记录。
我迷失了如何设置注释或者如果使用 addJoinedEntityResult()类并设置事件,因为 $ parentAlias 将是足以将此结果正确映射到我的对象,因为查询中的连接中存在另一个条件。它倾向于填充上述查询中每个事件的每个赞助者对象,即使录制季节中活动的赞助商 NULL 。
非常感谢任何帮助和/或建议。