doctrine join して sfDocetinePager 使うと大量にSQLはかれる

$this->hasMany('ATable', array('local' => 'a_table_id', 'foreign' => 'id'));
$q = $this->createQuery()
          ->select('self.id as id')
          ->from($this->_options['name'] . ' self')
          ->leftJoin('self.ATable at');

$pager = new sfDoctrinePager($this->_options['name'], $limit);
$pager->setQuery($q);
$pager->setPage($page);
$pager->init();

ってあったときにこれで取得したレコードを foreach で回すと1レコードごとに1SQL発行しちゃう。

$this->hasMany('ATable', array('local' => 'a_table_id', 'foreign' => 'id'));
$q = $this->createQuery()
          ->select('self.id as id, at.id as at_id')
          ->from($this->_options['name'] . ' self')
          ->leftJoin('self.ATable at');

$pager = new sfDoctrinePager($this->_options['name'], $limit);
$pager->setQuery($q);
$pager->setPage($page);
$pager->init();

のようにしてjoinしてるテーブルの主キー(今回の場合はat.id)を明示的にselectすると解決。

なんでやねん。