Doktrini ilişkisi var bir rekor taktıktan sonra kimliği alma

2 Cevap php

Ben PHP Doktrin Project kullanarak yeni Rekoru taktıktan sonra id alma ile ilgili bir sorun yaşıyorum.

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 kod örneği:

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

Çıktısı:

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

Veritabanı SQL Dökümü:

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: ORM modeli sınıfları oluşturmak için Doctrine::generateModelsFromDb() yöntemini kullanıyorum.

PS: innodb 5.0.75-0ubuntu10.2 ve php 5.2.6-3ubuntu4.5: Doktrin mysql sürüm 1.2.1 kullanarak.

2 Cevap

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

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

Bu kullanmış:

PRIMARY KEY  (`id`),

Ve o düzgün çalışır.

It's a MySQL issue I guess. Bu benim tablolar tasarım hata var, değil.

print_r($city->get('id')); daha fazla bilgi tutmak mı?