我对DQL如何工作感到困惑,并且在这里真的需要一些帮助。
我有三个表,称为“Band”,“Agent”和“BandAgent”。
BandAgent是多对多关系的中间表,包含agent_id和band_id。
如何使用DQL语句检索与特定band_id相关的所有代理?
修改
此代码有效,但我不知道这是否是正确的方法。 Echos屏幕上所有与BandID Band相关的相关代理:
//$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
我最后读了很多关于Doctrine的内容,最后离开了Magic Finders。以下代码是我最终为多对多问题所做的事情,如果有人有兴趣的话:
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'];
}
答案 0 :(得分:3)
Doctrine提供Magic Finders。
$bandAgentTable = Doctrine_Core::getTable('BandAgent');
$bandAgentTableSearch = $bandAgentTable->findByBand($band);
这将搜索表Band
中的列BandAgent
,并将其与变量$band
匹配。
取景器的基本模式 方法如下:
findBy%s($value)
或findOneBy%s($value)
。%s
可以是 列名称或关系别名。如果 你给出一个你必须给出的列名 你正在寻找的价值。如果你 指定一个关系别名,你可以 要么传递一个实例 关系类找到,或给予 实际主键值。
更新:为了响应您的修改,您还可以同时搜索两列。
$agent = $bandAgentTable->findByBandIdAndId($band->getId(), $bandAgent['agent_id']);