Yii 许多“与财产的关系失败”;ClassName.RelationName";没有定义

Yii 许多“与财产的关系失败”;ClassName.RelationName";没有定义,yii,Yii,基本上,我想建立表“城市”和“图像”之间的关系。它们都有一个ID列,该列由第三个名为cities\u 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 `imag

基本上,我想建立表“城市”和“图像”之间的关系。它们都有一个ID列,该列由第三个名为cities\u 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)'),
'citiesImages' => array(self::MANY_MANY, 'Images', 'cities_images(imageId,cityId)'),
Images.php中的关系:

'citiesImages' => array(self::MANY_MANY, 'CitiesImages', 'cities_images(id,imageId)'),
'citiesImages' => array(self::MANY_MANY, 'Cities', 'cities_images(cityId,imageId)'),
我正在尝试CitiesController内部的测试操作,内容如下:

$cities = Cities::model()->findByPk(2);
var_dump($cities->images);exit;
但这会导致一个错误:

未定义属性“Cities.images”


请注意,有一个ID为2的城市,在cityId为2且imageId为1的城市图片中有一行。images表中还有一行ID=1,因此我不明白为什么不能访问与给定城市关联的图像。

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

$cities = Cities::model()->findByPk(2);
var_dump($cities->citiesImages);exit;
因为Cities.php模型就是这样设置的

更新:

对,您只需更改模型以指向正确的模型:

Cities.php:

'citiesImages' => array(self::MANY_MANY, 'CitiesImages', 'cities_images(id,cityId)'),
'citiesImages' => array(self::MANY_MANY, 'Images', 'cities_images(imageId,cityId)'),
Images.php:

'citiesImages' => array(self::MANY_MANY, 'CitiesImages', 'cities_images(id,imageId)'),
'citiesImages' => array(self::MANY_MANY, 'Cities', 'cities_images(cityId,imageId)'),

这将导致PHP警告:
include(CitiesImages.PHP)function.include无法打开流:没有这样的文件或目录
Oh right。您现在只需要更改模型的关系。检查一下,让我知道查询是否有效。您也可以将名称更改为不同的名称,而不是CitieImage,以减少混淆。然后你可以做你想做的事情:$cities->images。如果在Cities.php模型中将模型中的关系名称从“citiesImages”更改为“images”,则可以这样做。图像也是如此。在将关系更改为指向另一个模型后,我在var_dump-ing$cities->cityImages时开始看到一个空数组。即使使用了
Cities::model()->findAll()
而不是
findByPk()
。因此,由于您从$Cities->citiesImages接收到一个数组,您只需对结果进行foreach,并在image对象上引用该属性即可。像foreach($cities->citiesimagesas$image){echo$image->file;}