开发者

Getting ID after inserting a record that has relation in Doctrine

开发者 https://www.devze.com 2022-12-16 09:28 出处:网络
I\'m having a trouble with getting the id after inserting a new Record using PHP Doctrine Project. In inserting a new record in a table with no parent table (no foreign key) no problem happens.

I'm having a trouble with getting the id after inserting a new Record using PHP Doctrine Project.

In inserting a new record in a table with no parent table (no foreign key) no problem happens. But when inserting a rel开发者_Go百科ated record here comes the problem, that I get only the parent id which is useless in my case.

PHP code example:

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

The output is:

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

Why the ID is empty!, where the row was inserted successfully!. I need this to do more insertion that based the city.id, like another areas that has this city as a parent.

Note using the $city->id causes this error: Warning: Invalid argument supplied for foreach() in Doctrine/Record.php on line 1151

Database SQL Dump:

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: I'm using the Doctrine::generateModelsFromDb() method to generate ORM model classes.

PS: using the Doctrine version 1.2.1, mysql:innodb 5.0.75-0ubuntu10.2, and php 5.2.6-3ubuntu4.5.


A co-worker discovered the solution. It was because of this line of code:

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

I used this:

PRIMARY KEY  (`id`),

And it works correctly.

It's a MySQL issue I guess. It's not, it's bug in my tables design.


Does print_r($city->get('id')); hold more information?

0

精彩评论

暂无评论...
验证码 换一张
取 消