我在保存多对多关系方面遇到了麻烦。我的数据库架构如下: -
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对象; foreignKey看起来不对。
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] => )
答案 0 :(得分:2)
在Article
类的Many-Many关系中,您应首先放置文章的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关系。
答案 1 :(得分:0)
我一直在使用yii-manymanyactiverecord扩展来帮助简化流程,您可以在此处找到它:http://www.yiiframework.com/extension/yii-manymanyactiverecord/