在Doctrine中插入具有关系的记录后获取ID

4

我遇到了一个问题,在使用PHP Doctrine Project插入新记录后,无法获取id。

如果在没有父表(没有外键)的表中插入新记录,则不会出现任何问题。 但是,当插入相关记录时,问题就来了,我只能获得无用的父ID。

PHP代码示例:

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

输出结果为:
Array
(
    [id] => 
    [country_id] => 6
)

为什么ID是空的!在成功插入行的地方!。 我需要根据城市.id进行更多的插入,例如另一个具有该城市作为父级的区域。

注意使用$city->id会导致此错误: 警告:在Doctrine/Record.php的第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。


1
你的数据库转储中有两个国家表,但缺少城市表。 - Karsten
2个回答

5
一位同事找到了解决方案。原因是这行代码:
PRIMARY KEY  (`id`,`country_id`),

我使用了这个:

PRIMARY KEY  (`id`),

它可以正常工作。

我想这是一个MySQL问题。实际上不是,而是我的表设计中的错误。


我也在考虑这个问题,为什么你一开始要将country_id添加到主键中呢?还是Doctrine做的? - Karsten
其实我不太擅长MYSQL或数据库,我更擅长编程。这是我在设计数据库时犯的错误。顺便说一下:我使用了Mysql-workbench来设计它。 - Omar Al-Ithawi

0

print_r($city->get('id')); 会输出更多信息吗?


不,它保存了空值,并导致了这个错误: 警告:在Doctrine/Record.php的第1151行提供了无效的参数 NULL - Omar Al-Ithawi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接