PHP
ページネーション
pagination
cakephp3

Cakephp3のページネーションで複数条件のorderbyを実現させる方法

これが初投稿になりますので間違えてる部分やいい方法があったらズシズシ教えてください。

2017年9月からウェブ開発エンジニアとしてGENKIです。

業務でPHP、 CAKEPHPを使用したサービスの開発をしている中で見つけた解決策や自分の趣味でやってる開発の状況などを共有していく場にする予定です!

今回のお題は
Cakephp3のページネーションで複数条件のorderbyを実現させる方法
でしたのでここからはそのことについて!

もしコントローラー側のみで利用する場合は、

$this->paginate($commentsTable->find()
    ->order([
        'id' => 'DESC',
        'multi * multi DESC'
    ])
    ->limit(10)
);

この場合、1ページ目だけは正常に表示をされるがページネートで生成されたリンクからページを変更すると、
SORTDirectionがURLに追加されていてそれが悪さをする!

これに気づかず前日には会社で(๑⁼̴̀д⁼̴́๑)ドヤッ‼った自分が居た

この問題に対する解決策として幾つか参考URLを見つけて試してみたが問題は改善されず。。
(内容としてはSORTDirectionをdisableだかfalseにするなどだったが、そうしてしまうと必要なQueryまで消してしまいページ切り替え後に絞込ができなくなってしまった)

<?= $this->Paginator->numbers() ?>

ページネーションを生成しているのはこのコードで生成された際のURLにSORTDirectionが付随してきてしまうのがエラーの原因になっている。ということは??

$('.paging > li > a').each(function() {
    var $href = $(this).attr('href');   
    $(this).attr('href', $href.split('sort')[0]);
});

そういうことですね!

Jqueryで無理くり消してしまえば良いのではないか!!
ということで現在はこのように対応をしています!!

CakePHP使いの方でもっと全然いい方法をご存知の方がいらっしゃいましたらご教示いただければ幸いです!!

では!! :)