Есть таблицы.
Код: Выделить всё
CREATE TABLE `currency` (
`id` smallint(5) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID записи',
`name` varchar(100) NOT NULL COMMENT 'Наименование валюты (может быть любым. Уникально)',
`ISOChar` varchar(3) DEFAULT NULL COMMENT 'Трёхбуквенный алфавитный (alfa-3) код валюты (ISO)',
`ISONum` varchar(3) DEFAULT NULL COMMENT 'Трёхзначный цифровой (number-3) код валюты (ISO)',
`base` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT 'Признак базовой валюты. Базовая валюта может быть только 1. Проверка на уровне php.',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
UNIQUE KEY `ISOChar` (`ISOChar`),
UNIQUE KEY `ISONum` (`ISONum`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Валюты';
CREATE TABLE `currency_rate` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID записи',
`parentId` smallint(5) unsigned NOT NULL COMMENT 'ID валюты, по отношению к котрой выставляется курс',
`rate` decimal(10,2) unsigned NOT NULL COMMENT 'Курс',
`currencyId` smallint(5) unsigned NOT NULL COMMENT 'ID валюты, которая в данном случае выступает валютой',
`unit` decimal(10,2) unsigned NOT NULL COMMENT 'Количество единиц валюты, за которое дают rate',
`date` datetime NOT NULL COMMENT 'Дата курса',
PRIMARY KEY (`id`),
KEY `parentId` (`parentId`,`currencyId`,`date`),
KEY `currencyId` (`currencyId`),
KEY `date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Курсы валют';
CREATE TABLE `request` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`number` int(10) NOT NULL COMMENT 'Номер заявки',
`date` date DEFAULT NULL COMMENT 'Дата заявки',
`buyer` int(11) NOT NULL COMMENT 'Покупатель (ссылка на таблицу клиентов)',
`buyer_name` varchar(255) NOT NULL,
`base_cost` decimal(10,2) DEFAULT NULL COMMENT 'Базовая стоимость',
`currency_rate` bigint(20) unsigned NOT NULL COMMENT 'Курс валюты',
`discount` decimal(5,2) DEFAULT NULL COMMENT 'Скидка, %',
`comment` text NOT NULL COMMENT 'Комментарий',
`org` varchar(255) DEFAULT NULL COMMENT 'Организация',
`officer` int(11) NOT NULL COMMENT 'Ответственный (ссылка на таблицу users)',
`officer_name` varchar(128) NOT NULL COMMENT 'Имя ответственного пользователя',
`program` text COMMENT 'Программа',
`blocked` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT 'Заюлокирована (0-нет, 1-да)',
`archived` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT 'Архивная (0-нет, 1-да)',
`pay_status` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT 'Статус оплаты (0-нет, 1-да)',
`pay_date` date DEFAULT NULL COMMENT 'Дата предполгаемой оплаты',
`non_cash` tinyint(1) unsigned zerofill NOT NULL DEFAULT '0' COMMENT 'Безналичный расчет (0-нет, 1-да)',
PRIMARY KEY (`id`),
UNIQUE KEY `number` (`number`),
KEY `date` (`date`,`buyer`,`officer`,`blocked`,`archived`,`pay_status`,`pay_date`,`non_cash`),
KEY `buyer` (`buyer`,`officer`),
KEY `officer` (`officer`),
KEY `officer_name` (`officer_name`),
KEY `buyer_name` (`buyer_name`),
KEY `currency_rate` (`currency_rate`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Заказы';
Мне нужно вывести курс валюты, т.е., получить курс, по id, и вывести наименование базовой валюты и валюты, по отношению к которой выставлен курс.
Вот оиписание связей.
Код: Выделить всё
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(
'officer0' => array(self::BELONGS_TO, 'User', 'officer'),
'buyer0' => array(self::BELONGS_TO, 'Clients', 'buyer'),
'currency_rate0' => array(self::BELONGS_TO, 'CurrencyRate', 'currency_rate'),
'currency_pid' => array(self::HAS_MANY, 'Currency', array('parentId'=>'id'), 'through'=>'currency_rate0'),
'currency_cid' => array(self::HAS_MANY, 'Currency', array('currencyId'=>'id'), 'through'=>'currency_rate0'),
);
}
Первые две связи добавлены при генерации модели, остальные я добавлял сам.
Собственно получить название валюты для parentId у меня получилось. А для currencyId не получается.
Запрос выдает ошибку Not unique table/alias: 'currency_rate0'.
Ну это понятно.
Но как быть в моем случае? Как можно вытянуть оба имени?
Я понимаю, что эти сложности у меня возникли скорее всего из-за неправильной стрктуры БД. Собственно, за совет как было правильнее хранить такие данные, буду благодарен.