1

我有 3 个模型。每个都有一个列,其中包含一个名为“created”的 DateTime 在对每个模型执行 find() 之后,我想组合这 3 个列表并根据这个创建日期对它们进行排序。有没有一种简单的方法可以在 cakephp 中做到这一点。这是我使用 find() 查询数据库的代码片段。我这样做了 3 次,每个模型一次。有没有办法像我描述的那样组合和排序这些?

$this->set('users',
    $this->Account->find('all', 
        array('conditions'=>
            array('OR'=>
                array('Account.organization_name LIKE'=>'%'.$words.'%', 
            'Account.first_name LIKE'=>'%'.$words.'%',
            'Account.last_name LIKE'=>'%'.$words.'%', 
            'Account.middle_name LIKE'=>'%'.$words.'%')))),
    $this->paginate()); 
4

1 回答 1

2

我通过将所有不同的模型组合到一个数组中并这样做Set::sort来做到这一点,如下所示:

$allEntities = array();

$articles = $this->Article->find( ... );
foreach ($articles as $k => $v) {
    $allEntities[] = $v['Article'];
}
$documents = $this->Document->find( ... );
foreach ($documents as $k => $v) {
    $allEntities[] = $v['Document'];
}
$videos = $this->Video->find( ... );
foreach ($videos as $k => $v) {
    $allEntities[] = $v['Video'];
}

if (sizeof($allEntities) > 1) {
    $allEntities = Set::sort($allEntities, '/created', 'DESC');
}

如果您需要实体的模型名称,您可以这样做,例如:

$videos = $this->Video->find( ... );
foreach ($videos as $k => $v) {
    $v['Video']['modelName'] = 'Video';
    $allEntities[] = $v['Video'];
}
于 2012-10-31T13:13:14.440 回答