代码之家  ›  专栏  ›  技术社区  ›  jgallant

多对多关系的DQL语句

  •  2
  • jgallant  · 技术社区  · 15 年前

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

    如何使用DQL语句检索与特定band\u 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'];
    }
    
    1 回复  |  直到 15 年前
        1
  •  3
  •   Jungle Hunter    15 年前

    条令提供 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']);
    
    推荐文章