2013-01-11 29 views
0

我無法保存多對多的關係。我的數據庫模式是如下: -Yii多對多保存問題

articles 
- id (PK) 
- content 

tags 
- id (PK) 
- name 

article_tag 
- article_id (PK) 
- tag_id (PK) 

我的文章模式有如下關係: -

'tags' => array(self::MANY_MANY, 'Tag', 'article_tag(tag_id, article_id)'), 

然而,當我看到使用Yii的行爲,我得到以下錯誤: -

Table "tags" does not have a column named "article_tag(tag_id, article_id)". 

我已經貫穿了從模式到關係的所有事情,我似乎無法弄清楚問題所在。我也嘗試過使用其他擴展,並且它們都沒有保存到m:n表中。

我在這裏錯過了什麼嗎?

其他信息

這裏是我的CManyManyRelation對象;外鍵只是看起來不正確。

CManyManyRelation Object ([limit] => -1 [offset] => -1 [index] => [through] => [joinType] => LEFT OUTER JOIN [on] => [alias] => [with] => Array () [together] => [scopes] => [name] => tags [className] => Tag [foreignKey] => restaurant_tag(restaurant_id, tag_id) [select] => * [condition] => [params] => Array () [group] => [join] => [having] => [order] => [_e:CComponent:private] => [_m:CComponent:private] =>) 

回答

2

Article類的多對多的關係,你應該把第一條的id,然後將標籤的ID:

'tags' => array(self::MANY_MANY, 'Tag', 'article_tag(article_id, tag_id)'), 

然後在類Tag你應該有:

'articles' => array(self::MANY_MANY, 'Article', 'article_tag(tag_id, article_id)'), 

編輯:我的壞,我沒有意識到它是保存導致問題的相關模型。 沒有內置的可能性來保存Yii中的相關記錄

對我來說,保存相關型號的最佳解決方案是擴展activerecord-relation-behavior。該擴展將處理所有HAS_MANY和MANY_MANY關係。

+0

嗨@darkheir,它仍然不是爲我工作。我用CManyManyRelation的輸出編輯了我的問題。外鍵看起來不正確。 –

+0

你使用的是什麼yii行爲? – darkheir

+0

嗨@darkheir,這是我的錯誤。爲了測試它,我必須在模型中註釋掉所有的驗證規則。它正在工作。還是要謝謝你的幫助。 –