Получение идентификатора после вставки записи, имеющей отношение в Doctrine - PullRequest
4 голосов
/ 16 января 2010

У меня проблемы с получением идентификатора после вставки новой записи с использованием PHP Doctrine Project.

При вставке новой записи в таблицу без родительской таблицы (без внешнего ключа) проблем не возникает. Но при вставке связанной записи возникает проблема: я получаю только родительский идентификатор, который в моем случае бесполезен.

Пример кода PHP:

$city = new City();
$city->name = "Baghdad";
$city->country_id = 6;
$city->save();
print_r($city->identifier());
exit;

Вывод:

Array
(
    [id] => 
    [country_id] => 6
)

Почему идентификатор пуст !, где строка была успешно вставлена ​​!. Мне нужно сделать это для большей вставки, основанной на city.id, как в других областях, где этот город является родителем.

Примечание с использованием $city->id вызывает эту ошибку: Warning: Invalid argument supplied for foreach() in Doctrine/Record.php on line 1151

База данных SQL-дамп:

CREATE TABLE IF NOT EXISTS `country` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(64) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name_UNIQUE` (`name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;


CREATE TABLE IF NOT EXISTS `city` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(64) collate utf8_unicode_ci NOT NULL,
  `country_id` int(11) NOT NULL,
  PRIMARY KEY  (`id`,`country_id`),
  KEY `fk_city_country` (`country_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11 ;


ALTER TABLE `city`
  ADD CONSTRAINT `fk_city_country` FOREIGN KEY (`country_id`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION;

Кстати: я использую метод Doctrine::generateModelsFromDb() для генерации классов модели ORM.

PS: использование Doctrine версии 1.2.1, mysql: innodb 5.0.75-0ubuntu10.2 и php 5.2.6-3ubuntu4.5.

Ответы [ 2 ]

5 голосов
/ 16 января 2010

Сотрудник обнаружил решение. Это было из-за этой строки кода:

PRIMARY KEY  (`id`,`country_id`),

Я использовал это:

PRIMARY KEY  (`id`),

И это работает правильно.

Это проблема MySQL, я думаю . Это не так, это ошибка в дизайне моих таблиц.

0 голосов
/ 16 января 2010

Имеет ли print_r($city->get('id')); больше информации?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...