これが初投稿になりますので間違えてる部分やいい方法があったらズシズシ教えてください。
2017年9月からウェブ開発エンジニアとしてGENKIです。
業務でPHP、 CAKEPHPを使用したサービスの開発をしている中で見つけた解決策や自分の趣味でやってる開発の状況などを共有していく場にする予定です!
今回のお題は
「Cakephp3のページネーションで複数条件のorderbyを実現させる方法」
でしたのでここからはそのことについて!
もしコントローラー側のみで利用する場合は、
$this->paginate($commentsTable->find()
->order([
'id' => 'DESC',
'multi * multi DESC'
])
->limit(10)
);
この場合、1ページ目だけは正常に表示をされるがページネートで生成されたリンクからページを変更すると、
SORTとDirectionがURLに追加されていてそれが悪さをする!
これに気づかず前日には会社で(๑⁼̴̀д⁼̴́๑)ドヤッ‼った自分が居た
この問題に対する解決策として幾つか参考URLを見つけて試してみたが問題は改善されず。。
(内容としてはSORTとDirectionをdisableだかfalseにするなどだったが、そうしてしまうと必要なQueryまで消してしまいページ切り替え後に絞込ができなくなってしまった)
<?= $this->Paginator->numbers() ?>
ページネーションを生成しているのはこのコードで生成された際のURLにSORTとDirectionが付随してきてしまうのがエラーの原因になっている。ということは??
$('.paging > li > a').each(function() {
var $href = $(this).attr('href');
$(this).attr('href', $href.split('sort')[0]);
});
そういうことですね!
Jqueryで無理くり消してしまえば良いのではないか!!
ということで現在はこのように対応をしています!!
CakePHP使いの方でもっと全然いい方法をご存知の方がいらっしゃいましたらご教示いただければ幸いです!!
では!! :)