0

基本的には、テーブル「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の行があるため、特定の都市に関連付けられている画像にアクセスできない理由がわかりません。

4

1 に答える 1

2

間違った名前を参照しているだけです。する必要があります:

$cities = Cities::model()->findByPk(2);
var_dump($cities->citiesImages);exit;

これがCities.phpモデルでの設定方法だからです。

アップデート:

そうです、適切なモデルを指すようにモデルを変更するだけです。

Cities.php:

'citiesImages' => array(self::MANY_MANY, 'Images', 'cities_images(imageId,cityId)'),

Images.php:

'citiesImages' => array(self::MANY_MANY, 'Cities', 'cities_images(cityId,imageId)'),
于 2012-08-16T18:52:55.470 に答える