PGメモ

非エンジニアの記録

symfonyとpagerとgroup by

symfonyで使えるsfPropelPager
便利でよいのだが、group byをするとトータルの数がうまく取得できず、group byした総計が返ってこない。
それを回避するためのtips

  public static function getSomething($item_id, $page)
  {
    $c = new Criteria();
    $c->add(self::ITEM_ID, $item_id);
    $c->add(self::IS_DELETE, false);

    $pager = new sfPropelPager('Something', 10);
    $pager->setCriteria($c);
    $pager->setPage($page);
    $pager->setPeerCountMethod('getGroupedItemIdCount');
    $pager->init();

    return $pager;
  }

セレクトする部分は上記のように書き
同じモデル内に

  public static function getGroupedItemIdCount($c)
  {
    $copy = clone $c;
    // ここはgroupbyしたいカラム名
    $copy->addGroupByColumn(parent::ITEM_ID);
    return parent::doCount($copy);
  }

を加える

そうするとどうだろう、group byした総計が返ってくるではありませんか