CakePHP. Как я могу сделать модельный тест в таблице с другим первичным ключом? - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть эта таблица

CREATE TABLE myexamples.problems (
  id INT,
  name VARCHAR(45) NULL ,
  pk_id INT AUTO_INCREMENT PRIMARY KEY
);

Но когда я пытаюсь протестировать модель в cakephp, она не работает, потому что таблица имеет два атрибута автоинкремента.Следующий запрос

CREATE TABLE `test_suite_problems` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `pk_id` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY  (`pk_id`)
)
DEFAULT CHARSET=latin1, COLLATE=latin1_swedish_ci, ENGINE=InnoDB;

вызывает эту ошибку:

"1075: Incorrect table definition; there can be only one auto column and it must be defined as a key"

У меня в классе модели

<?php
class Problem extends AppModel {
    var $name = 'Problem';
    var $displayField = 'name';
    var $primaryKey='problems';
}
?>

Но я не знаю, как сделатьID поля не имеет атрибута автоинкремента, и я не могу изменить структуру таблицы.

1 Ответ

0 голосов
/ 29 ноября 2011

У вас нет поля с именем "проблемы".Так что это одна проблема.Ваш PK выглядит как pk_id, поэтому установите правильное имя поля для primaryKey.

Другое не является проблемой CakePHP:

1075: Incorrect table definition; there can be only one auto column and it must be defined as a key

Это ошибка SQL.Вы не можете иметь два автоматически увеличивающихся поля.Измените свой прибор так, чтобы он соответствовал вашей реальной схеме таблицы, в которой нет двух полей с автоматическим увеличением.

Ваша схема базы данных не соответствует соглашениям CakePHP.Следуйте соглашениям, и вы получите гораздо меньше проблем и получите выгоду от «авто-магии» фреймворка.Я думаю, вы пытались испечь приборы, но торт не смог распознать правильные поля, потому что вы не соблюдаете соглашения.

...