2015-09-02 24 views
-1

我想用Yii關係創建一個查詢。這是我的關係:爲什麼我不能用yii項目中的關係做這個查詢?

//Articles model 
return array(
      'articlesHasTags' => array(self::HAS_MANY, 'ArticlesHasTag', 'articles_id', 
          "with"=>"tag", 
          ), 
          ), 
//ArticlesHasTag model 
     return array(
      'articles' => array(self::BELONGS_TO, 'Articles', 'articles_id'), 
      'tag' => array(self::BELONGS_TO, 'Tag', 'tag_id'), 
     ); 

這是查詢:

$blog = Articles::model()->with(array("articlesHasTags"))->findAllByAttributes(array(),array(
     "condition"=>"t.del = 0 AND t.active = 1 AND articlesHasTags.tag_id = {$tag->id}", 
     'order'=>"t.publish_start DESC", 
     "limit"=>10, 
    )); 

之前,我的$tag->id

的錯誤信息是:

未知列 'articlesHasTags.tag_id'

我覺得關係很好,因爲我可以使用它,而這個 「articlesHasTags.tag_id = {$tag->id}

我改變與表名稱的關係名稱。然後完整的錯誤信息是:

CDbCommand未能執行SQL語句:SQLSTATE [42S22]: 柱未發現:在 1054未知列'articles_has_tag.tag_id 'where子句'。執行的SQL語句是:SELECT tid AS t0_c0tactive AS t0_c1tpublish_start AS t0_c2tpublish_start_local AS t0_c3tcreate_time AS t0_c4tlast_modify AS t0_c5ttitle AS t0_c6turl AS t0_c7tshort_desc AS t0_c8tcontent AS t0_c9timage AS t0_c10tcomment AS t0_c11thightlight AS t0_c12tvote AS t0_c13ttype AS t0_c14, tusers_id AS t0_c15tnewspaper_id AS t0_c16tdel AS t0_c17tregion_id AS t0_c18tlanguage_id AS t0_c19tadult AS t0_c20usersid AS t1_c0usersemail AS t1_c1userspassword AS t1_c2usersauthor_name AS t1_c3userslocation AS t1_c4, userslast_login AS t1_c5usersactive AS t1_c6, usersremember_me AS t1_c7usersrank AS t1_c8, userspaypal_acc AS t1_c9usersurl AS t1_c10, usersabout_me AS t1_c11usersimage AS t1_c12usersfacebook AS t1_c13usersgoogle AS t1_c14, usersdel AS t1_c15usersadmin_active AS t1_c16, userscreate_time AS t1_c17usersfirst_name AS t1_c18, userslast_name AS t1_c19newspaperid AS t4_c0, newspapername AS t4_c1newspapercreate_time AS t4_c2newspapertype AS t4_c3newspaperactive AS t4_c4newspaperurl AS t4_c5newspaperlocation AS t4_c6newspapernewspaper_category_id AS t4_c7 FROM articlest LEFT OUTER JOIN usersusers ON(tusers_id = usersid)LEFT OUTER JOIN newspapernewspaper ON (tnewspaper_id = newspaperid)WHERE(t.del = 0 AND t.active = 1 AND articles_has_tag.tag_id = 42)ORDER BY t.publish_start DESC LIMIT 10

這裏是articles_has_tag表

CREATE TABLE IF NOT EXISTS `articles_has_tag` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `articles_id` int(11) DEFAULT NULL, 
    `tag_id` int(11) DEFAULT NULL, 
    `date` datetime DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `fk_articles_has_tag_tag1_idx` (`tag_id`), 
    KEY `fk_articles_has_tag_articles1_idx` (`articles_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=93 ; 

回答

2

爲什麼你沒有使用findAll?你把所有東西都放在條件下 而在SQL中提到的第二件事是你沒有關係articlesHasTags。

你可以試試這個。

$blog = Articles::model() 
    ->with("articlesHasTags" => array(
     'alias' => 'articlesHasTags', 
     'together' => true, //join in single query 
     'condition' => "articlesHasTags.tag_id = {$tag->id}"//may be use param? 
    ))->findAll(array(
     "condition"=>"t.del = 0 AND t.active = 1", 
     'order'=>"t.publish_start DESC", 
     "limit"=>10, 
    )); 
+0

它的作品! TY! –

1

更新時間: 試試這個。

$blog = Articles::model()->with(array('articlesHasTags' => array(
     'alias'=>'articleHTag', 'condition' => "articleHTag.tag_id = ".$tag->id)))->findAllByAttributes(array(),array(
     "condition"=>"t.del = 0 AND t.active = 1", 
     'order'=>"t.publish_start DESC", 
     "limit"=>10, 
    )); 
+0

謝謝你的答案。我改變了它,但錯誤消息再次出現。我編輯了我的問題。你需要更多的代碼嗎? –

+0

我已更新我的答案。所以,檢查出來。 – GAMITG

+0

Ty再次。錯誤消息是:「未知列」articleHTag.tag_id'「 –

相關問題