0

Propel ORM を使用する Symfony2 プロジェクトで、KNP Paginator バンドルを使用してリスト ビューを列で並べ替えようとしています。私のコードは次のとおりです。

public function indexAction() 
{
    $query = CustomerQuery::create();

    $paginator = $this->get('knp_paginator');
    $pagination = $paginator->paginate($query, $this->get('request')->query->get('page', 1), 30);

    return compact('pagination');
}

そして私の見解は次のとおりです。

<table>
    <thead>
        <tr>
            <th>{{ pagination.sortable('Company', 'companyName')|raw }}</th>
            <th>{{ pagination.sortable('Contact', 'contact')|raw }}</th>
            <th>{{ pagination.sortable('E-mail', 'email')|raw }}</th>
        </tr>
    </thead>
    <tbody>
        {% for customer in pagination %}
            <!-- [...] -->
        {% endfor %}
    </tbody>
</table>

私が得たように、生成されたリンクは正しいようです(たとえば):

/customers/?sort=companyName&direction=asc&page=1

しかし、クエリはソートされません。生成されたリクエストにはORDER BY句がありません。それで、私の質問は: 結果の順序付けは Propel で利用できますか (もしそうなら、どこが間違っていますか)? または、コントローラーで手動で処理する必要がありますか?

4

1 に答える 1

0

*knp_paginator.subscriber* イベントへのサブスクライバーを作成し、クエリに何らかの並べ替えを適用するクラスにすることができます。

Knp \Component\Pager\Event\Subscriber\Sortable\Doctrine\ORM\QuerySubscriberの例を見てください。

PropelQuerySortable クラスを追加するために knp_components に PR を作成しますが、正確な時期はわかりません。

于 2012-10-28T18:46:10.377 に答える