Doctrine2:对象映射查询结果

时间:2016-05-19 17:15:08

标签: php mysql orm doctrine-orm

我正在使用Symfony3和Doctrine2进行项目。该项目旨在跟踪哪个志愿者计划为非营利组织举办哪些活动。

他们接受人或公司赞助他们的活动并拥有一个系统。

  • 志愿者负责策划活动。一名志愿者可以在一个赛季内只举办一场比赛。
  • 赞助商付钱,以便在活动名称旁边显示他们的名字。
  • 赞助公司/个人可以赞助一个或多个活动,但仅限一个季节。赞助商可以完全退出,开始赞助其他活动或继续赞助下一季的同一活动。

我有6张桌子:

  • 提案
  • 季节
  • sponsor_relations
  • 事件
  • 志愿者
  • event_volunteer_relations

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;

以下是其结果的可视化: query result

我使用 ResultSetMapping()类将结果映射到我的实体。当我使用console命令( console doctrine:schema:validate )时,没有给出任何错误,因此实体没有问题。

当只有一个关系时,很容易映射;关于那一个有很多例子。但是, sponsor_relations 表的每一行都依赖于3个不同表的记录。

我迷失了如何设置注释或者如果使用 addJoinedEntityResult()类并设置事件,因为 $ parentAlias 将是足以将此结果正确映射到我的对象,因为查询中的连接中存在另一个条件。它倾向于填充上述查询中每个事件的每个赞助者对象,即使录制季节中活动的赞助商 NULL

非常感谢任何帮助和/或建议。

0 个答案:

没有答案
相关问题