0

基本上,我想建立表“城市”和“图像”之间的关系。它们都有一个 ID 列,该列受第三个名为 city_images 的表的约束。这是中间表格的结构:

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

我有两个适用于城市和图像表的模型。

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 的城市,并且ities_images 中有一行 cityId=2 和 imageId=1。图像表中还有一行 ID=1,所以我不明白为什么我无法访问与给定城市关联的图像。

4

1 回答 1

2

您只是引用了错误的名称。应该:

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

因为这就是它在 Cities.php 模型中的设置方式。

更新:

是的,您需要简单地更改模型以指向正确的模型:

城市.php:

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

图片.php:

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