Учение: Как совместить 3 таблицы, с отношением многих ко многим - PullRequest
0 голосов
/ 18 августа 2010

Есть 3 таблицы:

catalog
product
product2catalog

Таблица product2catalog состоит из следующих полей:

catalog_id
product_id

Как получить товар в каталоге? Как восстановить соединение, чтобы иметь возможность сделать это:

$CatalogTable = CatalogTable::getInstance();
$Catalog = $CatalogTable->find( $id );
var_dump( $Catalog->product );

Не могли бы вы мне помочь?

Ответы [ 2 ]

1 голос
/ 18 августа 2010

Чтобы запросить отношение «многие ко многим», вы можете сделать что-то вроде этого:

$q = Doctrine_Query::create()
    ->from('Catalogue c')
    ->leftJoin('c.Product p')
    ->where('c.id = ?', $id);

$c = $q->fetchArray();
1 голос
/ 18 августа 2010

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

Установите ваши отношения следующим образом: (в функции setUp () таблицы каталога)

$this->hasMany('Product as Products',
array('local' => 'catalog_id',
      'foreign' => 'product_id',
      'refClass' => 'product2catalog'
    ));

Аналогично, в YAML:

Catalog:
# ...
  relations:
   # ...
    Products:
      class: Product
      local: catalog_id
      foreign: product_id
      refClass: product2catalog

Вы должны сделать то же самое для класса продукта - точно такой же синтаксис, просто инвертировать локальные / внешние ссылки.

...