cakephp分页-按类别对记录进行排序(每个记录有不同的类别)

cakephp分页-按类别对记录进行排序(每个记录有不同的类别),php,mysql,cakephp,pagination,Php,Mysql,Cakephp,Pagination,我正在尝试对每个类别的记录进行排序,如果用户有自己喜欢的类别,则每个记录都有一个或多个类别。。如果没有,则只显示所有记录。。 例如,如果记录有食品类别,并且登录的用户碰巧选择了食品作为其兴趣之一,则显示的记录列表将进行排序,使食品类别下的记录位于列表顶部 我有 $this->Steplist->virtualFields['in_like'] = "IF(Record.category_id IN ($interests), 0, 1)"; $order["in_like"] = '

我正在尝试对每个类别的记录进行排序,如果用户有自己喜欢的类别,则每个记录都有一个或多个类别。。如果没有,则只显示所有记录。。 例如,如果记录有食品类别,并且登录的用户碰巧选择了食品作为其兴趣之一,则显示的记录列表将进行排序,使食品类别下的记录位于列表顶部

我有

$this->Steplist->virtualFields['in_like'] = "IF(Record.category_id IN ($interests), 0, 1)";
$order["in_like"] = 'asc';
然后

对于$this->Paginator->settings

然后 类别的int\u id

现在,不是每个记录有一个类别,而是必须将其更改为多个类别。由于站点现在已经完成,为了避免更改太多,我只需将类别id(int)更改为类别(varchar),类别id用逗号分隔。。因此,如果记录中附加了多个类别,那么它现在可以是3,5,7,而不是5

我尝试将虚拟字段条件更改为:

$this->Steplist->virtualFields['in_like'] = "IF(Record.categories IN ($interests), 0, 1)";
但结果并不正确。
如何改为这样做(cakephp 2.4.3)?

这将在settigns分页上起作用

class RecipesController extends AppController {

    public $components = array('Paginator');        

    public function list_recipes() {   

        $paginate = array(
           'limit' => 25,
           'order' => array(
               'Post.title' => 'asc'
           )
        );

        $this->Paginator->settings = $paginate;

        // similar to findAll(), but fetches paged results
        $data = $this->Paginator->paginate('Recipe');
        $this->set('data', $data);
    }
}

但通常情况下,如果您使用虚拟字段:虚拟字段的实现有一些限制。首先,不能在条件、顺序或字段数组的关联模型上使用virtualFields。这样做通常会导致SQL错误,因为ORM不会替换字段。这是因为很难估计可能找到关联模型的深度


您可以在检索数据后使用sort()或sort()

仍然不明白您要做什么…我正在尝试按类别对记录进行排序,如果用户有自己喜欢的类别,则每条记录都有一个或多个类别。。如果没有,则只显示所有记录@IsaacRajaei@IsaacRajaei编辑了我的问题,介绍了我要做的事情。你在哪里把$order传递给你pagination@IsaacRajaei$order像这样传递给'order':$this->Paginator->settings=array('conditions'=>array('Record.status='=>'public'))“限额”=>10,“订单”=>$order);
class RecipesController extends AppController {

    public $components = array('Paginator');        

    public function list_recipes() {   

        $paginate = array(
           'limit' => 25,
           'order' => array(
               'Post.title' => 'asc'
           )
        );

        $this->Paginator->settings = $paginate;

        // similar to findAll(), but fetches paged results
        $data = $this->Paginator->paginate('Recipe');
        $this->set('data', $data);
    }
}