cakephp paginate - 按类别排序记录(每个记录有不同的类别)

时间:2014-04-14 08:04:21

标签: php mysql cakephp pagination

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

我有

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

然后

'order' => $order

$ this-> Paginator->设置

然后 int为category_id

现在,不必为每条记录设置一个类别,而是必须将其更改为多个类别。为了避免因网站现已完成而发生如此大的变化,我只需将 category_id(int)更改为类别(varchar),其中类别ID用逗号分隔..所以代替例如,如果记录附有几个类别,它现在可以是3,5,7。

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

$this->Steplist->virtualFields['in_like'] = "IF(Record.categories IN ($interests), 0, 1)";

但结果不正确。 我该怎么办呢(cakephp 2.4.3)?

1 个答案:

答案 0 :(得分:0)

这将适用于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);
    }
}

http://book.cakephp.org/2.0/en/core-libraries/components/pagination.html

Limitations of virtualFields

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

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