2

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

我有三个表,分别称为“Band”、“Agent”和“BandAgent”。

BandAgent 是多对多关系的中间表,包含 agent_id 和 band_id。

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


编辑

这段代码有效,但我不知道这是否是正确的方法。通过 BandID 在屏幕上回显与某个 Band 相关的所有关联 Agent:

//$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'];
}
4

1 回答 1

3

Doctrine 提供Magic Finders

$bandAgentTable = Doctrine_Core::getTable('BandAgent');    
$bandAgentTableSearch = $bandAgentTable->findByBand($band);

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

finder 方法的基本模式如下: findBy%s($value)findOneBy%s($value). %s可以是列名或关系别名。如果您给出列名,则必须给出您要查找的值。如果指定关系别名,则可以传递关系类的实例来查找,或者给出实际的主键值。

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

$agent = $bandAgentTable->findByBandIdAndId($band->getId(), $bandAgent['agent_id']);
于 2010-08-13T22:18:22.027 回答