2014-11-24 55 views
1

我有表格如何在活動記錄中使用連接時選擇特定列

1)topic_tag_map。 列:ID,topic_id,TAG_ID,VERSION_NAME
2)標籤 列: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

PLZ人幫助是嚴重的問題 – RahulG 2014-11-24 13:54:49

回答

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. 
+0

沒有不工作,但我得到這個錯誤 活動記錄「TopicTagMap」試圖選擇一個無效的列「tagging.tag_name」。請注意,該列必須存在於表中或者是具有別名的表達式。 – 2014-11-24 13:15:28

+0

對不起,我忘了將CDbCriteria的屬性設置爲true。 – 2014-11-24 13:17:41

+0

你能告訴我們模型'標記'的關係嗎? – 2014-11-24 13:21:16

0

你給出的方式會導致sql注入只是使用params。

對於活動記錄使用的關係,你只需要添加此

$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); 

希望這將解決您的問題

+0

這也給出了相同的錯誤 活動記錄「TopicTagMap」試圖選擇無效列「tagging.tag_name」。請注意,該列必須存在於表中或者是具有別名的表達式。 – 2014-11-24 13:20:24