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すると解決。
なんでやねん。