Сложные связи таблиц, relations

Есть такая проблемка, никак не могу решить.

Существует 4 таблицы: movies, studies, makers и таблица связи между ними - connector.

movies имеет movie_id | title | catalog

studies - studio_id | name

makers - maker_id | nick

connector - movie_id | studio_id | maker_id

Нужно вытащить список из movies по каталогу и к каждому ролику - студии, которые делали и люди из этой студии которые делали этот ролик и, еще могут быть люди, которые не принадлежат никакой студии (тогда studio_id=0).

Раньше я вытаскивал авторов на один ролик таким запросом:


SELECT studies.name, makers.nick, studies.studio_id , makers.maker_id

FROM connector 


INNER JOIN makers 

ON connector.maker_id=makers.maker_id 


LEFT JOIN studies st 

ON connector.studio_id=studies.studio_id 


WHERE connector.movie_id=$movie_id



Прошу помочь написать relations. И вообще впринцепи как можно лучше решить такую задачу?

Вполне справится с этим автогенерация через yiic.

содайте модель а так же CRUD для всего этого добра.

Было отвечено тут:

http://www.yiiframework.com/forum/index.php?/topic/3094-find-activerecord-by-its-relations-key-match/page__p__17175&#entry17175

У меня relations везде остается пустое, автоматически не генерится. Как-то может по особому нужно составлять структуру БД?

а внешние ключи вы объявили(создали) ?

создал - пробывал по разному: и в comment на myisam и по нормальному в innodb, после генерации моделей и crud, relations остаются пустые. Определенно, чтото не так делаю, хотя кажется в соответствии с документацией!

Большая просьба выложить дамп db mysql, после которого появится чтото в relations!




CREATE TABLE  `Item` (

  `id` int(11) NOT NULL auto_increment,

  `name` varchar(255) collate utf8_unicode_ci NOT NULL default '',

  `description` text collate utf8_unicode_ci,

  `is_set` tinyint(1) default NULL,

  `set_amount` int(3) default NULL,

  `is_change` int(1) default NULL,

  `is_sale` int(1) default NULL,

  `sale_price` decimal(13,2) default '0.00',

  `is_visible` tinyint(1) default NULL,

  `createTime` int(11) NOT NULL default '0',

  `updateTime` int(11) default NULL,

  `countryID` int(11) unsigned default '999',

  `manufacturerID` int(11) unsigned default NULL,

  `sinceTime` int(11) unsigned default NULL,

  `volume` decimal(13,2) default NULL,

  `type` varchar(45) collate utf8_unicode_ci default NULL,

  PRIMARY KEY  (`id`),

  KEY `FK_item_country` (`countryID`),

  KEY `FK_item_manufacturer` (`manufacturerID`),

  CONSTRAINT `FK_item_country` FOREIGN KEY (`countryID`) REFERENCES `Country` (`id`) ON DELETE CASCADE,

  CONSTRAINT `FK_item_manufacturer` FOREIGN KEY (`manufacturerID`) REFERENCES `Manufacturer` (`id`) ON DELETE CASCADE

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE  `Country` (

  `id` int(11) unsigned NOT NULL auto_increment,

  `name` varchar(255) collate utf8_unicode_ci NOT NULL default '',

  `iso_code` varchar(3) collate utf8_unicode_ci NOT NULL default '',

  `iso_code2` varchar(3) collate utf8_unicode_ci NOT NULL default '',

  `noc_code` varchar(3) collate utf8_unicode_ci NOT NULL default '',

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

CREATE TABLE  `Manufacturer` (

  `id` int(11) unsigned NOT NULL auto_increment,

  `logo` varchar(255) collate utf8_unicode_ci NOT NULL default '',

  `description` text collate utf8_unicode_ci NOT NULL,

  `name` varchar(255) collate utf8_unicode_ci NOT NULL default '',

  PRIMARY KEY  (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



У меня в туториальном блоге тоже пустые релейшнс были. Yii пока что штудирую между делом, но данный вопрос тоже интересен.

Спасибо за помощь, помогло.

как быть если надо связать таблицы не по PK, а по определенным значениям?

скажем таблицы

house(id,switch,port)

lans(id,switch,port,vlan_id)

vlan(id,name)

house.switch=lans.switch, house.port=lans.port, vlan.id=lans.vlan_id

везде PK - id, просто добавить поле vlan_id в house нельзя

нада сделать связь между house и vlan

как составить relations?