Модель Yii не поддерживает отношения автоматически с использованием gii

Привет, я никогда не сталкивался с такой проблемой. Пожалуйста, объясните мне, когда я сделал неправильно. Я попытался сгенерировать 2 модели, которые имеют отношение, но они не вошли в модели. Вот структура БД.

CREATE TABLE IF NOT EXISTS `property` (
    `property_id` int(11) NOT NULL AUTO_INCREMENT,
    `ListPrice` int(11) NOT NULL,
    `ListingURL` text NOT NULL,
    `ProviderName` varchar(255) NOT NULL,
    `ProviderURL` text NOT NULL,
    `modificationTimestamp` text NOT NULL,
    PRIMARY KEY (`property_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE IF NOT EXISTS `location` (
    `loc_id` int(11) NOT NULL AUTO_INCREMENT,
    `property_id` int(11) NOT NULL,
    `latitude` varchar(255) NOT NULL DEFAULT '0.0000',
    `longitude` varchar(255) NOT NULL DEFAULT '0.0000',
    PRIMARY KEY (`loc_id`),
    KEY `property_id` (`property_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

--
-- Constraints for table `location`
--
ALTER TABLE `location`
ADD CONSTRAINT `location_ibfk_1` FOREIGN KEY (`property_id`)
     REFERENCES `property` (`property_id`) ON DELETE CASCADE ON UPDATE CASCADE;

В модели нет отношения:

public function relations()
{
    // NOTE: you may need to adjust the relation name and the related
    // class name for the relations automatically generated below.
    return array(
    );
}

person uiTeam324    schedule 16.10.2014    source источник
comment
Я только что попробовал выполнить три ваших SQL-запроса и проверил модель Location с помощью Gii. Отношение там. Я получаю 'property' => array(self::BELONGS_TO, 'Property', 'property_id'),.   -  person Jerome    schedule 16.10.2014
comment
странный. я первый раз с таким сталкиваюсь.   -  person uiTeam324    schedule 16.10.2014
comment
Использует ли ваша база данных InnoDB по умолчанию?   -  person Jerome    schedule 16.10.2014
comment
я никогда не понимал, как создавать отношения в базе данных, поэтому я использую дизайнер, который делает их для меня, вы можете попробовать MySQL Workbench   -  person Oscar Reyes    schedule 17.10.2014
comment
Да @Jerome, по умолчанию это InnoDB   -  person uiTeam324    schedule 17.10.2014
comment
@SRana. Можете ли вы подтвердить, что выбрали вариант «Построить отношения» в gii? Вы также используете последнюю версию фреймворка?   -  person Jerome    schedule 17.10.2014
comment
@jerome - версия yii - 1.1.15, и по умолчанию выбрано Build Relations.   -  person uiTeam324    schedule 17.10.2014
comment
@SRana - извините, похоже, это должно сработать, основываясь на всех представленных вами доказательствах. Единственное, что вы делаете, отличается от того, как я строю свои запросы, это то, что я добавляю ограничение как часть CREATE TABLE, а не изменяю таблицу постфактум, но я действительно не вижу в этом проблемы. Если gii не видит отношения, это может быть связано с тем, что отношение не создано должным образом в MySQL. Если вы использовали клиент с графическим интерфейсом, чтобы попытаться добавить строки вручную, возникнут ли ошибки при создании записи местоположения, если вы указали идентификатор свойства, которого нет в таблице свойств?   -  person Jerome    schedule 17.10.2014


Ответы (1)


Иногда это происходит с инструментом gii. Что вам нужно сделать, так это прокомментировать отношение в самой таблице. gii иногда пропускает связь, но в основном подхватывает ее, если она присутствует в комментарии. Итак, измените свои таблицы и прокомментируйте внешний ключ, как показано ниже, он должен работать.

CREATE TABLE IF NOT EXISTS `location` (
    `loc_id` int(11) NOT NULL AUTO_INCREMENT,
    `property_id` int(11) NOT NULL COMMENT 'Foreign Key (property_id) references property(property_id )',
    `latitude` varchar(255) NOT NULL DEFAULT '0.0000',
    `longitude` varchar(255) NOT NULL DEFAULT '0.0000',
    PRIMARY KEY (`loc_id`),
    KEY `property_id` (`property_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;
person jdkraftz    schedule 17.10.2014
comment
У меня было три отношения, и я оставил один комментарий, чтобы проверить теорию, и Гии подхватил все три. Спасибо! - person Steven McElveen; 22.08.2016