Недавно решил перейти с Zend на Yii, возникла проблема с CActiveDataProvider, а именно при использовании с связанными таблицами.
Есть три таблицы posts, posts_topics, topics (стандартная модель тегов многие ко многим)
Необходимо вывести все посты по заданной теме (тегу)
$dataProvider = new CActiveDataProvider('Post', array(
'criteria' => array(
'condition' => 'topics.seo = :seo',
'params' => array(':seo' => $_GET['topic_url']),
'with' => array('topics'),
'order' => 'update_time DESC'
),
'pagination' => array(
'pageSize' => Yii::app()->params['postsPerPage'],
),
));
И судя по Документации все верно.
Но при выводе возникает ошибка “Column not found: 1054 Unknown column ‘topics.seo’ in ‘where clause’”
Смотрю лог и вижу два запроса:
первый (который кстати работает и построен верно)
SELECT
COUNT(DISTINCT `t`.`id`)
FROM `posts` `t`
LEFT OUTER JOIN `posts_topics` `topics_topics`
ON (`t`.`id` = `topics_topics`.`post_id`)
LEFT OUTER JOIN `topics` `topics`
ON (`topics`.`id` = `topics_topics`.`topic_id`)
WHERE (topics.seo = :seo)
и второй (на котором вываливается исключение)
SELECT
`t`.`id` AS `t0_c0`,
`t`.`title` AS `t0_c1`,
`t`.`content` AS `t0_c2`,
`t`.`create_time` AS `t0_c3`,
`t`.`update_time` AS `t0_c4`,
`t`.`author_id` AS `t0_c5`,
`t`.`seo` AS `t0_c6`
FROM `posts` `t`
WHERE (topics.seo = :seo)
ORDER BY update_time DESC
LIMIT 15)
Видимо это какой-то внутренний запрос самого CActiveDataProvider только почему нет связанных таблиц а условие осталось?