2010-01-16 135 views
4

我在使用PHP Doctrine Project插入新记录后获取id时遇到了麻烦。插入一条与Doctrine有关系的记录后获取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是空!其中行被成功地插入! 我需要这个做更多的基于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; 

BTW:我使用的是Doctrine::generateModelsFromDb()方法生成的ORM模型类。

PS:使用Doctrine版本1.2.1,mysql:innodb 5.0.75-0ubuntu10.2和php 5.2.6-3ubuntu4.5。

+1

你的数据库转储中有两个国家表,城市表丢失 – Karsten 2010-01-16 10:55:48

+0

我的不好,我编辑它。 – 2010-01-16 11:00:19

回答

5

一位同事发现了这个解决方案。 这是因为该行的代码:

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

我用这个:

PRIMARY KEY (`id`), 

而且它工作正常。

这是一个MySQL问题,我猜 。这不是,这是我的桌子设计中的错误。

+0

我也想到这一点,为什么你添加country_id首要的原始钥匙?还是教义呢? – Karsten 2010-01-16 11:15:20

+0

真的,我在MYSQL或数据库一般不太好,我在编码上更好。这首先是我设计数据库时的错误。顺便说一句:我用Mysql-workbench来设计它。 – 2010-01-16 11:39:46

0

请问print_r($city->get('id'));是否有更多信息?

+0

不,它保留为空,并导致此错误: '警告:无效的参数提供了foreach()在Doctrine/Record.php线1151 NULL' – 2010-01-16 10:59:25