基本的には、テーブル「cities」と「images」の関係を構築したいと思います。どちらにも、cities_imagesという3番目のテーブルによって制約されるID列があります。真ん中のテーブルの構造は次のとおりです。
CREATE TABLE IF NOT EXISTS `cities_images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cityId` int(11) NOT NULL,
`imageId` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `imageId` (`imageId`),
KEY `cities_images_ibfk_2` (`cityId`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
ALTER TABLE `cities_images`
ADD CONSTRAINT `cities_images_ibfk_2` FOREIGN KEY (`cityId`) REFERENCES `cities` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `cities_images_ibfk_1` FOREIGN KEY (`imageId`) REFERENCES `images` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
都市と画像のテーブルで機能する2つのモデルがあります。
Cities.php内の関係:
'citiesImages' => array(self::MANY_MANY, 'CitiesImages', 'cities_images(id,cityId)'),
Images.php内の関係:
'citiesImages' => array(self::MANY_MANY, 'CitiesImages', 'cities_images(id,imageId)'),
次の内容でCitiesController内のテストアクションを試しています。
$cities = Cities::model()->findByPk(2);
var_dump($cities->images);exit;
ただし、これによりエラーが発生します。
プロパティ「Cities.images」は定義されていません。
ID = 2の都市があり、citys_imagesにcityId=2およびimageId=1の行があることに注意してください。また、画像テーブルにはID = 1の行があるため、特定の都市に関連付けられている画像にアクセスできない理由がわかりません。