2012-08-16 4 views
0

기본적으로 'cities'및 'images'테이블 간의 관계를 만들고 싶습니다. 그들은 둘 다 cities_images라는 세 번째 테이블에 의해 제약되는 ID 열을 가지고 있습니다. 중간에있는 테이블의 구조는 다음과 같습니다.ManyMany 관계가 "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 내부

관계 : Images.php 내부

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

관계 :

'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 인 도시가 있고 citiesId = 2 및 imageId = 1 인 cities_images에 행이 있습니다. 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 파일 또는 디렉토리 ' –

+0

아 맞아. 이제 모델의 관계를 바꿀 필요가 있습니다. 쿼리가 작동하는지 확인하고 알려주십시오. –

+0

이름을 citiesImages가 아닌 다른 것으로 변경하여 혼동을 덜 수 있습니다. 그렇다면 처음부터하고 싶은 일, 즉 $ cities-> images를 할 수 있습니다. Cities.php 모델에서 모델의 관계 이름을 'citiesImages'에서 'images'로 변경하면이 작업을 수행 할 수 있습니다. 이미지도 마찬가지입니다. –

관련 문제