Orm 多对多关系的DQL语句
我对DQL的工作原理感到困惑,在这里我真的需要一些帮助 我有三张桌子,分别是“乐队”、“特工”和“班达金特” BandAgent是多对多关系的中间表,包含agent\u id和band\u id 如何使用DQL语句检索与特定band_id相关的所有代理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
编辑 这段代码有效,但我不知道这是否是正确的方法。按波段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']);