views:

289

answers:

2

Problem was solved check my answer

Hi,

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 related 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.

Thanks in advance

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

A: 

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

Karsten
No, It holds null, and causes this error:`Warning: Invalid argument supplied for foreach() in Doctrine/Record.php on line 1151NULL`
Omar Dolaimy
A: 

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.

Omar Dolaimy
I was thinking of this too, why did you add the country_id to the primrary key in the first place? Or did Doctrine do that?
Karsten
Really I'm not that good in MYSQL or Database in general, I'm better in coding. It's my mistake in designing the database in the first place. BTW: I used Mysql-workbench to design it.
Omar Dolaimy