Я создаю облако тегов для своего сайта CakePHP и не могу создать «запрос CakePHP»:
модели:
Tag hambt Post
Post hambt Tag
дБ:
tags(id, name)
posts_tags(#post_id, #tag_id)
posts(id, title, ....)
Запрос sql:
SELECT tags.name, COUNT(*)+10 AS fontsize
FROM tags, posts_tags
WHERE tags.id = posts_tags.tag_id
GROUP BY posts_tags.tag_id
ORDER BY tags.name ASC
результат:
objective-c 11
PHP 12
test 11
test2 11
test3 12
tutoriel 13
проблема:
Я бы хотел построить запрос таким образом (я знаю, что мог бы использовать запрос $ this->, но это не сложный запрос, должен быть способ), но он не работает:
$opt = array(
'fields' => array('Tag.name','COUNT(*)+10 AS fontsize'),
'group' => array('PostsTag.tag_id'),
'order' => ....
);
$tags = $this->Post->Tag->find('all', $opt);
РЕДАКТИРОВАТЬ: Здесь ответ (спасибо Дейв)
$options['fields'] = array('Tag.name', 'COUNT(*) occurence');
$options['joins'] = array(
array(
'table' => 'posts_tags',
'alias' => 'PostsTag',
'type' => 'inner',
'conditions' => array(
'Tag.id = PostsTag.tag_id'
)
),
array(
'table' => 'posts',
'alias' => 'Post',
'type' => 'inner',
'conditions' => array(
'PostsTag.post_id = Post.id'
)
)
);
$options['group'] = array('Tag.name');
$options['order'] = array('Tag.name ASC');
$options['limit'] = 20;
$this->Tag->recursive = -1;
$data = $this->Tag->find('all', $options);