2013-09-15 3 views
1

Итак, я пытаюсь выполнить запрос, чтобы получить последние записи каждого пользователя, используя отношения CakePHP. В моей карте и пользователь модели у меня есть:Как я могу присоединиться к последним записям в CakePHP?

class Map (and User) extends AppModel { 
    public $hasMany = 'Geolog'; 
} 

И я пытаюсь делать этот запрос, чтобы поймать последнюю запись каждого пользователя. dg_maps и dg_users имеют много-много отношений.

SELECT 
    dg_users.id, 
    dg_users.email, 
    dg_maps.id, 
    dg_maps.latitude, 
    dg_maps.longitude, 
    dg_maps.timestamp 
FROM 
    (SELECT 
     * 
    FROM 
     dg_maps 
    ORDER BY dg_maps.timestamp DESC) dg_maps 
JOIN 
    dg_geologs ON dg_geologs.map_id = dg_maps.id 
JOIN 
    dg_users ON dg_users.id = dg_geologs.user_id 
GROUP BY dg_geologs.user_id; 

Что я делаю сейчас:

$this->Map->query('SELECT dg_users.id, dg_users.email, dg_maps.id, dg_maps.latitude, dg_maps.longitude, dg_maps.timestamp FROM (SELECT * FROM dg_maps ORDER BY dg_maps.timestamp DESC) dg_maps JOIN dg_geologs ON dg_geologs.map_id = dg_maps.id JOIN dg_users ON dg_users.id = dg_geologs.user_id GROUP BY dg_geologs.user_id'); 

Но, я знаю, что лучший метод, то это, используя методы Cake. Итак, как я могу это сделать?

Спасибо всем!

ответ

1

Я использовал это для моего проекта это очень просто

Easy way to generate CakePHP HABTM joins for use in pagination.

Так положить это в вашей модели (обратите внимание на аргументы функции - есть ошибка в функции от ссылки)

public function generateHabtmJoin ($joinModel, $joinType = 'INNER') { 
// If the relation does not exist, return an empty array. 
if (!isset($this->hasAndBelongsToMany[$joinModel])) { 
    return array(); 
} 

// Init joins, and get HABTM relation. 
$joins = array(); 
$assoc = $this->hasAndBelongsToMany[$joinModel]; 

// Add the join table. 
$bind = "{$assoc['with']}.{$assoc['foreignKey']} = {$this->alias}.{$this->primaryKey}"; 
$joins[] = array(
    'table' => $assoc['joinTable'], 
    'alias' => $assoc['with'], 
    'type' => $joinType, 
    'foreignKey' => false, 
    'conditions' => array($bind), 
); 

// Add the next table. 
$bind = "{$joinModel}.{$this->{$joinModel}->primaryKey} = {$assoc['with']}.{$assoc['associationForeignKey']}"; 
$joins[] = array(
    'table' => $this->{$joinModel}->table, 
    'alias' => $joinModel, 
    'type' => $joinType, 
    'foreignKey' => false, 
    'conditions' => array($bind), 
); 

return $joins; 

}

и вы можете вызвать эту функцию у своего контроллера У вас есть пример в ссылке

Смежные вопросы