CakePHPのPaginate便利ですよね。特に設定しなくても、ソートもページングもできる。素晴らしい。ただ、joinしているモデルのカラムをキーにソートしようとすると効かないという…。どうしよう。

答え→**バーチャルフィールドを設定する**

解決方法は簡単で、ソートしたいカラムをバーチャルフィールドとして登録するだけです。

model.php

<?php
class Hoge extends AppModel {
    var $virtualFields = array(
        hoge => JoinTable.hoge
    );

view.ctp

<?php echo $this->Hoge->sort(hoge,’ソートキー’); ?>

ただし、ソートのためだけにバーチャルフィールドを設定するとfindした時にうざったいことになる可能性があるので、必要な時だけに設定するのが吉。

ちなみに、なぜjoinしているモデルではソートできないのかというと、URLに適当なキーを直接入力してエラーになるのを防ぐためらしい。



blog comments powered by Disqus