Orm 多对多关系的DQL语句

Orm 多对多关系的DQL语句,orm,symfony1,doctrine,dql,Orm,Symfony1,Doctrine,Dql,我对DQL的工作原理感到困惑,在这里我真的需要一些帮助 我有三张桌子,分别是“乐队”、“特工”和“班达金特” BandAgent是多对多关系的中间表,包含agent\u id和band\u id 如何使用DQL语句检索与特定band_id相关的所有代理 编辑 这段代码有效,但我不知道这是否是正确的方法。按波段ID向屏幕回显所有相关代理: //$band is a Band Table Row $bandAgentTable = Doctrine_Core::getTable('BandAgen

我对DQL的工作原理感到困惑,在这里我真的需要一些帮助

我有三张桌子,分别是“乐队”、“特工”和“班达金特”

BandAgent是多对多关系的中间表,包含agent\u id和band\u id

如何使用DQL语句检索与特定band_id相关的所有代理


编辑

这段代码有效,但我不知道这是否是正确的方法。按波段ID向屏幕回显所有相关代理:

//$band is a Band Table Row
$bandAgentTable = Doctrine_Core::getTable('BandAgent');
$agentTable = Doctrine_Core::getTable('Agent');

$bandAgentTable = $bandAgentTable->findByBandId($band->getId());
foreach ($bandAgentTable as $bandAgent) {   
    $agent = $agentTable->findById($bandAgent['agent_id']);
    echo $agent[0]['name'];
}

编辑2

我最终读了很多关于教义的书,最终离开了魔法发现者。如果有人感兴趣,下面的代码就是我为我的多对多问题所做的:

public function getRelatedAgents() {
$q = Doctrine_Query::create()
   ->from('Band b')
   ->leftJoin('b.Agents a')
   ->where('b.id = ?', $this->getId());
$bands = $q->fetchArray();
return $bands[0]['Agents'];
}
学说提供了一个新的概念

这将搜索表
BandAgent
中的列
Band
,并将其与变量
$Band
匹配

查找器的基本模式 方法如下:
由%s($value)查找
findOneBy%s($value)
%s
可以是 列名或关系别名。如果 您提供了一个必须提供的列名 您正在寻找的价值。如果你 指定关系别名,您可以 或者传递 要查找的关系类,或给出 实际主键值

更新:为了响应您的编辑,您还可以同时搜索两列

$agent = $bandAgentTable->findByBandIdAndId($band->getId(), $bandAgent['agent_id']);

为了让它与魔法发现者一起工作,我必须做两次发现,以便将多对多关系连接在一起。我在上面的问题中发布了我的代码,也许你可以给我反馈我做错了什么。哎呀!我把你的密码看错了。是的,你可以这样做。您在两个表中拥有信息,而这两个表之间的唯一关联方式是通过另一个第三个表。因此,您必须在空腹的情况下查询所有三个表,这仍然只返回bandAgent表中的一行,bandAgent表是Band和Agent之间的连接表。作为最终结果,我需要从代理表中检索代理名称。我接受你的回答,因为你最终让我解决了我的问题。我只是不确定我做的是否正确。对以前的评论很抱歉。他误读了密码。我已经更新了评论。
$agent = $bandAgentTable->findByBandIdAndId($band->getId(), $bandAgent['agent_id']);