2012-08-16 50 views
0

基本上,我想建立表「城市」和「圖像」之間的關係。他們都有一個由名爲cities_images的第三個表限制的ID列。這裏是中間表的結構:Many_Many關係失敗,屬性「ClassName.RelationName」未定義

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; 

但是這會導致錯誤:

Property "Cities.images" is not defined.

請注意,有一個ID = 2的城市,cityIimages中有一行cityId = 2且imageId = 1。 ID = 1的圖像表中還有一行,所以我不明白爲什麼我無法訪問與給定城市相關的圖像。

回答

2

您只是引用了錯誤的名稱。應該是:

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

因爲這就是它在Cities.php模型中的設置方式。

UPDATE:

右鍵,你需要簡單地改變模型指向正確的模式:

Cities.php:

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

Images.php:

'citiesImages' => array(self::MANY_MANY, 'Cities', 'cities_images(cityId,imageId)'), 
+0

這導致PHP警告: 'include(CitiesImages.php)function.include無法打開流:沒有成功h文件或目錄' – 2012-08-16 18:54:38

+0

哦,對。你現在只需要改變你的模型的關係。檢查並讓我知道查詢是否有效。 – 2012-08-16 18:57:04

+0

您還可以將名稱更改爲不同的城市圖像,以減少混淆。然後你可以做你想做的事情:$ cities-> images。如果在Cities.php模型中將模型中的關係名稱從'citiesImages'更改爲'images',則可以這樣做。圖像也一樣。 – 2012-08-16 19:00:51