【问题标题】:cakephp paginate - sort records per categories (has different categories per record)cakephp paginate - 按类别对记录进行排序(每个记录有不同的类别)
【发布时间】:2014-04-14 17:31:12
【问题描述】:

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

我有

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

然后

'order' => $order

对于$this->Paginator->设置

那么 category_id 的 int

现在,不是每条记录都有 1 个类别,而是必须更改为多个类别。为避免由于站点现已完成而发生如此大的变化,我只需将 category_id (int) 更改为 categories (varchar) ,其中类别 ID 用逗号分隔.. 所以而不是例如 5,如果记录附加了多个类别,现在可以是 3,5,7..

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

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

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

【问题讨论】:

  • 还是不明白你要做什么...
  • 我正在尝试按类别对记录进行排序,如果用户有他喜欢的类别,每条记录都有一个或多个类别。如果没有,则只显示所有记录。@IsaacRajaei
  • @IsaacRajaei 编辑了我的问题,介绍了我正在尝试做的事情..
  • 你在哪里通过你的分页 $order
  • @IsaacRajaei $order 像这样传递给 'order' : $this->Paginator->settings = array( 'conditions' => array('Record.status =' => 'public' ), 'limit' => 10, 'order' => $order );

标签: php mysql cakephp pagination


【解决方案1】:

这将适用于设置分页。

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 的实现有一些限制。首先,您不能在关联模型上将 virtualFields 用于条件、顺序或字段数组。这样做通常会导致 SQL 错误,因为字段不会被 ORM 替换。这是因为很难估计可以找到相关模型的深度。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-06
    • 1970-01-01
    • 2018-04-06
    • 2013-07-17
    相关资源
    最近更新 更多