1

私は3つのモデルを持っています。それぞれに「created」という DateTime を保持する列があります。各モデルで find() を実行した後、3 つのリストを結合し、この作成日に従って並べ替えたいと思います。Cakephp でこれを行う簡単な方法はありますか。これは、find() を使用してデータベースにクエリを実行するコード スニペットです。これを 3 回、各モデルで 1 回行います。私が説明したように、これらを組み合わせて並べ替える方法はありますか?

$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

私はすべての異なるモデルを 1 つの配列に結合し、次の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 に答える