我遇到一个我不明白的问题。我花了几个小时才在这里发帖。
我尝试在事件和主题之间建立多对多关系。一个事件可以链接到几个主题,一个主题又链接到几个事件。我尝试建立单向和双向关联,但都没有用。如果我可以选择,我更喜欢事件类的拥有方。
这是我的 SQL 代码:
CREATE TABLE `event` (
`id_evenement` int(11) NOT NULL,
[...]
);
CREATE TABLE `theme` (
`id_theme` int(11) NOT NULL,
[...]
);
CREATE TABLE `events_themes_link` (
`id_evenement` int(11) NOT NULL,
`id_theme` int(11) NOT NULL
);
-- Primary keys
ALTER TABLE `event`
ADD PRIMARY KEY (`id_evenement`);
ALTER TABLE `theme`
ADD PRIMARY KEY (`id_theme`);
ALTER TABLE `events_themes_link`
ADD PRIMARY KEY (`id_evenement`, `id_theme`);
-- Constraints
ALTER TABLE `events_themes_link`
ADD CONSTRAINT `fk_id_evenement` FOREIGN KEY (`id_evenement`) REFERENCES `event` (`id_evenement`),
ADD CONSTRAINT `fk_id_theme` FOREIGN KEY (`id_theme`) REFERENCES `theme` (`id_theme`);
COMMIT;
我的 PHP 课程:
Event.php
/**
* Many Themes have Many Evenements.
* @ManyToMany(targetEntity="Theme", inversedBy="evenements")
* @JoinTable(name="events_themes_link",
* joinColumns={@JoinColumn(name="id_evenement", referencedColumnName="id_evenement")},
* inverseJoinColumns={@JoinColumn(name="id_theme", referencedColumnName="id_theme")}
* )
*/
private $themes;
Theme.php
/**
* Many Theme have Many Evenement.
* @ManyToMany(targetEntity="Event", mappedBy="themes")
*/
private $evenements;
主要问题是,当从 EventRepository 调用我的函数 findEvent 时,查找事件 ID 8:
public function findEvent($id)
{
$qb = $this->createQueryBuilder('e')
->leftJoin('e.themes', 't')
->addSelect('t')
->where('e.id_evenement = :idEvenement')
->setParameter('idEvenement', $id);
return $qb->getQuery()->getResult();
}
我有:
[{"id":8,[...],"themes":{}}]
主题变量为空。而在我的 SQL 数据库中,events_themes_link 表如下所示:
id_evenement id_theme
8 4
8 5
9 4
应该出现2次。 我不明白为什么我的themes参数总是空的.. 如果有人能帮助我,我会很高兴。
谢谢!
尝试过单向和双向多对多关联 试图在两个类(事件或主题)中添加/删除 JoinColumn/InverseJoinColumn
themes
变量不应为空,并且应包含 ID 为 4 和 5 的主题对象数组(因为数据库中有一个链接),事件 ID 为 8。