学说发现关系

时间:2010-05-25 10:46:25

标签: symfony1 doctrine orm foreign-key-relationship

我在使用学说选择数据子集时遇到了麻烦。

我有3张桌子

地点 联系 Contact_location

联系人和位置表包含名称和ID,另一个表只包含ID。例如:

Location
 loc_id: 1
 name: detroit
Contact
 contact_id: 1
 name: Mike
Contact_location
 loc_id: 1
 contact_id: 1

在学说中,位置和联系人表之间存在多对多关系,其中contact_location为ref_class。

我想要做的是在我的位置页面上我想找到所有联系人,例如loc_id = 1。

我试过了:

 $this->installedbases = Doctrine::getTable('contact')->findByloc_id(1);

希望教义会看到这种关系并得到它,但事实并非如此。

如何在相关的相关表格中进行学说搜索?我读过它可以使用Findby完成,但我发现文档不清楚。

2 个答案:

答案 0 :(得分:7)

findByloc_id()更改为findByLocId()。该方法由魔法__call()捕获。

答案 1 :(得分:2)

在表类上添加一个方法:

class ContactTable extends Doctrine_Table
{
  public function findByLocationId($id)
  {
    return self::createQuery("c")
      ->innerJoin("c.Location l")
      ->where("l.loc_id = ?", $id)
      ->execute();
  }
}

然后按如下方式调用它:

$loc_id = 1;
$result = Doctrine::getTable("Contact")->findByLocationId($loc_id);

Doctrine应该使用refclass为你执行内连接。