CakePHP - 将一组记录ID传递给paginate - 是否可能?

时间:2012-11-09 15:09:39

标签: cakephp

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

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

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

的内容
123,23,45,56,765,122,11.9,71,25

每个ID都是指文档模型的文档。我知道通常你会创建适当的ACO和ARO并让ACL / Auth组件处理用户可以访问的内容,但这次不是一个选项。所以我想如果我可以通过paginate /发现它可能是一个选项吗?

任何帮助都会非常感激。

提前致谢

1 个答案:

答案 0 :(得分: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');

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

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