我有桌子
1)topic_tag_map。
columns:id,topic_id,tag_id,version_name
2)标记
columns:id和tag_name
外键是tag_id和id
对于这两个表,我创建了模型和定义的关系,如下所示:
在topic_tag_map
中'topic' => array(self::BELONGS_TO, 'Topic', 'topic_id'),
'tagging' => array(self::BELONGS_TO, 'Tagging', 'tag_id'),
这里我只想从标记表中获取tag_name。 所以我尝试了这个:
$tags = TopicTagMap::model()->with(array(
'tagging'=>array(
'select' => 'tagging.tag_name',
'joinType'=>'INNER JOIN',
'condition' => 'topic_id = '.$topic->id.' and version_name = 1',
),
))->findAll();
但它提供了所有专栏。
之后我也尝试了这个:
$tags = TopicTagMap::model()->findAll(array(
'select' => 'tagging.tag_name',
'condition' => 'topic_id = '.$topic->id.' and version_name = 1',
'with' => 'tagging',
));
但这个投掷错误: 列名称无效
答案 0 :(得分:0)
您是否尝试过这样:
$criteria = new CDbCriteria;
$criteria->with = 'tagging';
$criteria->select = 'tagging.tag_name';
$criteria->together = true;
$criteria->addCondition('t.topic_id = '.$topic->id, 'AND');
$criteria->addCondition('t.version_name = 1', 'AND');
$tags = TopicTagMap::model()->findAll($criteria);
您必须在Tagging
模型中将关系定义为
'tag_map' => array(self::HAS_MANY,'TopicTagMap','tag_id'),
//You can use self::HAS_MANY or self::HAS_ONE or self::MANY_MANY on your tables relationship type.
答案 1 :(得分:0)
你给出的方式会导致sql注入只使用params。
要使用该关系的Active记录,您只需添加此
$criteria = new CDbCriteria;
$criteria->with = 'tagging';
$criteria->together = true;
$criteria->select = 'tagging.tag_name';
$criteria->addCondition('t.topic_id = :tId');
$criteria->addCondition('t.version_name = 1');
$criteria->params = array(":tId" => $topic->id);
$tags = TopicTagMap::model()->findAll($criteria);
希望这可以解决您的问题