1

ここで少し問題が発生しました:

$advList = Doctrine::getTable('Advertiser')
        ->createQuery('a')
        ->leftJoin('a.PrincCity p')
        ->leftJoin('a.TourCity t')
        ->leftJoin('a.Category')
        ->orderBy('a.new DESC')
        ->where('a.is_activated = ?', true)
        ->andWhereNotIn('a.category_id', array(4, 5))
        ->andWhere('( (t.slug IS NULL AND p.slug = ?) OR t.slug = ?)', array($city_slug, $city_slug))
        ->addOrderBy('a.created_at DESC');

    $this->pager = new sfDoctrinePager('Advertiser', 50);
    $this->pager->setQuery($advList);
    $this->pager->setPage($request->getParameter('page', 1));
    $this->pager->init();

このコードは、都市 (テーブル Advertiser の ID で表される) からすべての広告主を取得します。これで、id、AdvertiserId、CityID を含む 2 番目のテーブル Advertiser-City ができたので、1 つの広告主に複数の都市を含めることができます (たとえば、AdvertiserID 99 と異なる 5 行) CityID)。

問題は、都市からすべての広告主を取得する必要があることですが、上のコードは DB 内の 1 つのテーブルでしか機能しないため、2 番目のテーブル (追加の都市) を検索する方法がわかりません。

4

1 に答える 1

1

あなたの問題を理解できるかどうかはわかりませんが、nm Advertiser-city の関係が明確に定義されている場合:

Advertiser:
  ...
  relations:
    Cities: { class: City, refClass: AdvertiserCity, local: advertiser_id, foreign: city_id } 

AdvertiserCity:
  columns:
    advertiser_id: { type: integer,...}
    city_id: { type: integer,....}
  ...
  relations:
    City: { local: city_id, foreign: id, foreignAlias: AdvertiserCities } 
    Advertiser: { local: advertiser_id, foreign: id, foreignAlias: AdvertiserCities } 

次に、クエリは次のようになります。

$advList = Doctrine::getTable('Advertiser')
        ->createQuery('a')
        ->innerJoin('a.Cities c')
        ...
        ->addWhere('c.id = ?',$city_id)
        ...;
于 2012-11-19T15:06:24.030 に答える