MANY_MANY ключи

Всем привет!

У меня есть две таблицы:




users: user_id, name

articles: article_id, title



И есть таблица связка:


user_articles: u_id, article_id

Связь, которая вытаскивает все статьи для пользователя выглядит так:




'articles' => array(

  self::MANY_MANY, 'Article', 'user_articles(u_id, article_id)'

)



Внимательный читатель скажет, что будет выдана ошибка: "The relation "articles" in active record class "User" is specified with an invalid foreign key "u_id". The foreign key does not point to either joining table." И будет абсолютно прав!

Вопрос: как в ассоциации MANY_MANY указать, что у меня ключ в таблице users и user_articles разные?

P. S. Не предлагайте поменять структуру таблицы!!!

Проблем с разныи именами ключа таблицы и внешнего ключа в связывающей таблице быть не должно.

Указаны ли при создании таблиц первичные и внешние ключи. Имеется в виду, в СУБД.

Документация

Нет, user_id не указан как primary key. Означает ли это, что для MANY_MANY нельзя использовать поля, которые не указаны как primary key?

Вероятно, можно. Тут скорее дело во внешних ключах. В вашем случае поля таблицы "user_articles": "u_id" и "article_id" должны быть внешними ключами, связанными с каким-либо полем соответствующей таблицы. Иначе AR просто не поймёт каким образом строить связь. Насчет первичного ключа не уверен.

Спасибо. Я думал можно какой-нибудь хитрый аргумент указать в relation. Видимо, все-таки, придется делать изменения в базе данных.

На самом деле, там же в документации, есть такая фраза:

Но думаю, это означает, что в этом случае как раз должны быть указаны первичные ключи в таблицах, с которыи осуществляется связь.

Я думаю, что я поэкспериментирую с этим. 8)

Без изменения структуры таблицы никак. Нужно задать первичные ключи поям users.user_id и aritcles.article_id.

А поля в user_articles сделать как foreign keys.