учение найти связь - PullRequest
1 голос
/ 25 мая 2010

У меня проблемы с выбором подмножества данных с доктриной.

У меня есть 3 таблицы

Расположение контакт Contact_location

Таблицы контактов и местоположений содержат имя и идентификатор, в другой таблице - только идентификаторы. Например:

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

В доктрине существует множество взаимосвязей между таблицами местоположения и контактов с таблицей контактов в качестве ref_class.

Что я хочу сделать, так это на своей странице местоположения я хочу найти все контакты, где, например, loc_id = 1.

Я пытался:

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

надеясь, что доктрина увидит отношение и получит его, но это не так.

Как я могу сделать поиск доктрины в соответствующих связанных таблицах? Я прочитал, что это можно сделать с помощью Findby, но я нахожу документацию неясной.

Ответы [ 2 ]

7 голосов
/ 25 мая 2010

Измените findByloc_id() на findByLocId(). Метод пойман магией __call().

2 голосов
/ 25 мая 2010

Добавьте метод в свой класс таблицы:

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);

Доктрина должна использовать рефкласс для выполнения внутреннего соединения за вас.

...