Php 从Doctrine中的两个表中检索数据
我这里有个小问题:Php 从Doctrine中的两个表中检索数据,php,doctrine,symfony-1.4,Php,Doctrine,Symfony 1.4,我这里有个小问题: $advList = Doctrine::getTable('Advertiser') ->createQuery('a') ->leftJoin('a.PrincCity p') ->leftJoin('a.TourCity t') ->leftJoin('a.Category') ->orderBy('a.new DESC') ->where
$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表示)-现在我有了第二个表Advertiser city,其中包含ID、AdvertiserId和CityID,因此我可以为一个广告商设置多个城市(例如,有5行,其中AdvertiserId 99和不同的CityID)
问题是,我需要从一个城市获取所有广告商,但上面的代码只能在DB中的一个表中使用,因此我不知道如何在第二个表中搜索(使用其他城市)。我不确定我是否能理解您的问题,但我认为如果您定义了n-m广告商-城市关系:
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)
...;
我不确定我是否能理解您的问题,但我认为如果您对n-m广告商与城市的关系有明确的定义:
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)
...;