【问题标题】:CakePHP - Passing an array of record IDs to paginate - is it possible?CakePHP - 将一组记录 ID 传递给分页 - 有可能吗?
【发布时间】:2012-11-11 03:12:47
【问题描述】:

由于必须从旧的非蛋糕应用程序和奇怪构建的数据库表中导入数据,我需要将允许显示的记录数组分页传递 - 这可能吗?

通常我会将数据重新组织成适当的关系等,但由于时间尺度等原因,这是不可能的。

为您提供更多信息 - 在我的用户表中,我有一个字段,其中包含与允许他们查看的文档相关的 ID 列表。该字段将包含类似

123,23,45,56,765,122,11.9,71,25

每个 ID 都引用文档模型的文档。我知道通常您会创建适当的 ACO 和 ARO,并让 ACL/Auth 组件处理哪些用户可以访问哪些内容,但这一次不是一个选项。所以我想如果我可以通过 paginate/find 来做到这一点,它可能是一个选择?

任何帮助将不胜感激。

提前致谢

【问题讨论】:

    标签: cakephp


    【解决方案1】:

    您不会将 ID 列表传递给它,而是在分页条件中使用 ID - 如下所示。

    (代码写在我的头上,所以请原谅任何语法错误......等等。它至少应该给你正确的想法/路径):

    //Controller
    $this->loadModel('User');
    $this->loadModel('Document');
    
    $user = $this->User->findById($userId);
    
    $documentIds = explode(',', $user['User']['doc_ids']);
    
    $this->paginate = array(
        'conditions' => array(
            'id' => $documentIds
        )
    ));
    $documents = $this->paginate('Document');
    

    当您将数组作为条件传递时(例如'id'=>$arrayOfIds),它使用 MySQL 的“IN” - 类似于:

    ... WHERE id IN (45, 92, 173)
    

    【讨论】:

    • @tigrang - 我愿意 - 这就是我写的。 ;)
    猜你喜欢
    • 2020-09-20
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多