2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

2
Last updated at Posted at 2017-11-19

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

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使いの方でもっと全然いい方法をご存知の方がいらっしゃいましたらご教示いただければ幸いです!!

では!! :)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?