Проблема с сохранением Yii Many to Many

У меня возникли проблемы с сохранением отношения «многие ко многим». Моя схема базы данных выглядит следующим образом: -

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] => )

person John Doe    schedule 11.01.2013    source источник


Ответы (2)


В отношении Many-Many в классе Article вы должны указать сначала идентификатор статьи, а затем идентификатор тега:

'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.

person darkheir    schedule 11.01.2013
comment
Привет @darkheir, у меня это все еще не работает. Я отредактировал свой вопрос с выходом из CManyManyRelation. Внешний ключ выглядит неправильно. - person John Doe; 11.01.2013
comment
Какое поведение yii вы используете? - person darkheir; 11.01.2013
comment
Привет @darkheir, это была моя ошибка. Мне пришлось закомментировать все мои правила проверки в модели, чтобы проверить ее. Сейчас это работает. Спасибо за вашу помощь в любом случае. - person John Doe; 12.01.2013
comment
Плюс за обратный порядок идентификаторов для @darkheir! - person Joe; 17.05.2013

Я использовал расширение yii-manymanyactiverecord, чтобы упростить процесс, вы можете найти его здесь: http://www.yiiframework.com/extension/yii-manymanyactiverecord/

person keeg    schedule 11.01.2013