Intereting Posts
php сортировка массива по предопределенному порядку проверить, является ли переменная типа mysqli-объекта? Как пройти время в «highcharts»? Проблема с помощником Ajax в Cake PHP Как использовать параметр каскада в Doctrine2, чтобы связанные объекты автоматически сохранялись? .htaccess остановка URL-адреса Разделить на две переменные? Поиск против свойства в объекте JSON с использованием MySQL 5.6 Как вы присоединяетесь к двум объектам PDO в одном и том же цикле foreach? Получение геолокации с IP-адреса PDO: Как проверить, действительно ли соединение активно, для реального? Не удалось открыть «страницы /» для включения (include_path = '; C: \ Program Files (x86) \ DevDesktop \ common \ pear') index.php в строке 18 Исключение SQLSTATE при подключении к базе данных с помощью 000webhost Повторное сопоставление нескольких строк несколько раз Регулярное выражение для захвата символа между группой, но игнорирование значений в вложенной группе

Yii Модель с составным первичным ключом

Моя основная таблица MySQL – это совокупность из двух столбцов: space_id (INTEGER) и дня (DATE).

CREATE TABLE `ck_space_calendar_cache` ( `space_id` int(11) NOT NULL, `day` date NOT NULL, `available` tinyint(1) unsigned NOT NULL DEFAULT '0', `price` decimal(12,2) DEFAULT NULL, `offer` varchar(45) DEFAULT NULL, `presale_date` date DEFAULT NULL, `presale_price` decimal(12,2) DEFAULT NULL, `value_x` int(11) DEFAULT NULL, `value_y` int(11) DEFAULT NULL, PRIMARY KEY (`space_id`,`day`), KEY `space` (`space_id`), CONSTRAINT `space` FOREIGN KEY (`space_id`) REFERENCES `ck_space` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

Он отлично работает в сыром SQL, он жалуется, если я пытаюсь создать дубликат, но позволяет мне создавать строки в тот же день или тот же space_id.

Однако в Yii при использовании новых Object () и save () он жалуется, что «space_id» должен быть уникальным.

Я использовал «Giix» для генерации модели, если это имеет значение.

Я попытался добавить этот код к модели, но это не помогло:

 public function primaryKey(){ return array('space_id', 'day'); } 

Добавление этого кода в класс ActiveRecord в порядке, но не обязательно, потому что Yii уже имеет эту информацию из вашего объявления таблицы MySQL.

  public function primaryKey(){ return array('space_id', 'day'); } 

Когда Yii жалуется на то, что «space_id» будет уникальным, giix, возможно, добавила правило проверки правил () в ваш класс ActiveRecord. Эти правила проверяются до сохранения ActiveRecord, и это будет сохраняться только в том случае, если все правила в порядке. Прочтите раздел «Проверка данных» в «Окончательном руководстве» для получения дополнительной информации.

Из того, что я понимаю с Yii 1.1, составные первичные ключи больше не поддерживаются Gii, что разочаровывает многих разработчиков. В вашем коде есть другие плохо документированные изменения, кроме возвращаемого массива в качестве первичного ключа.

Лучшее объяснение, которое я нашел, было в этой дискуссии на форуме Yii.