기본적으로 '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 인 이미지 테이블에도 행이 있으므로 주어진 도시와 연결된 이미지에 액세스 할 수없는 이유는 알 수 없습니다.
PHP 경고 : 'include (CitiesImages.php) function.include 스트림을 열지 못했습니다 : 성공하지 못했습니다. h 파일 또는 디렉토리 ' –
아 맞아. 이제 모델의 관계를 바꿀 필요가 있습니다. 쿼리가 작동하는지 확인하고 알려주십시오. –
이름을 citiesImages가 아닌 다른 것으로 변경하여 혼동을 덜 수 있습니다. 그렇다면 처음부터하고 싶은 일, 즉 $ cities-> images를 할 수 있습니다. Cities.php 모델에서 모델의 관계 이름을 'citiesImages'에서 'images'로 변경하면이 작업을 수행 할 수 있습니다. 이미지도 마찬가지입니다. –