Как присоединить таблицу

Как в ICMS2 присоединить таблицу к выборке из базы?

#1 31 января 2016 в 14:17
Есть у меня тип контента, подразумевающий спецолимпиаду.
Создал набор, в котором выводятся лучшие посты, которые за определенное время голосования набрали наибольшее количество баллов рейтинга.
Для этого в таблицу cms_rating_log добавил колонку votedate, и добавил в компонент заполнение этой колонки временем голосования. Тут всё работает и замечательно добавляется время в колонку.

Потом создал поле контента, присвоил ему системное имя votedate и пытаюсь создать набор для вывода лучших постов за вчерашний день.
В наборе посты должны выводиться по убыванию рейтинга и с фильтрацией по votedate (не старше двух дней, не моложе одного).
Соответственно при выводе набора ожидаемо получаю ошибку:

Ошибка в запросе БД:
Unknown column 'i.votedate' in 'where clause'

SELECT COUNT(i.id) as count
FROM cms_con_anec i
WHERE (i.votedate >= DATE_SUB(NOW(), INTERVAL 1 DAY)) AND (i.votedate < DATE_SUB(NOW(), INTERVAL 2 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_pub = '1')
Последние вызовы:

getCount() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\model.php: 1496
getContentItemsCount() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\frontend.php: 181
renderItemsList()
call_user_func_array() @ D:\open\OpenServer\domains\tren.ru\system\core\action.php: 29
__call() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\actions\category_view.php: 92
renderItemsList() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\actions\category_view.php: 92
run()
call_user_func_array() @ D:\open\OpenServer\domains\tren.ru\system\core\controller.php: 278
runExternalAction() @ D:\open\OpenServer\domains\tren.ru\system\core\controller.php: 209
runAction() @ D:\open\OpenServer\domains\tren.ru\system\controllers\content\frontend.php: 28
route()
Это и понятно, в cms_con_anec такой колонки нет. Теперь нужно подключить в выборку таблицу cms_rating_log. А вот как это сделать — ума не приложу.
Как в инструкции, написал $this->join('rating_log', 'r', 'r.target_id = i.id');
Пробовал засовывать это в разные места \system\controllers\content\model.php — никакого результата.

Кто может подсказать, в каком месте этой модели производится выборка из таблицы контента и как туда присоединить выборку из таблицы рейтинга?
______________________________________________________________________________________________________

Влепил в content\frontend.php строку
$total = $this->model->join('rating_log', 'r', 'r.target_id = i.id')->getContentItemsCount($ctype['name']);

Теперь ошибка выглядит так:
  1. Unknown column 'i.votedate' in 'where clause'
  2.  
  3. SELECT COUNT(i.id) as count
  4. FROM cms_con_anec i
  5. JOIN cms_rating_log as r ON r.target_id = i.id
  6. WHERE (i.votedate >= DATE_SUB(NOW(), INTERVAL 1 DAY)) AND (i.votedate < DATE_SUB(NOW(), INTERVAL 2 DAY)) AND (i.is_parent_hidden IS NULL) AND (i.is_approved = '1') AND (i.is_pub = '1')
Осталось выяснить, как сменить элиас полю, либо как сделать, чтобы запрос выполнялся не к i.votedate а к r.votedate?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.