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 が空なのですか!. この都市を親とする別の地域のように、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;

ところで:私はDoctrine::generateModelsFromDb()ORM モデル クラスを生成するメソッドを使用しています。

PS: Doctrine バージョン 1.2.1、mysql:innodb 5.0.75-0ubuntu10.2、および php 5.2.6-3ubuntu4.5 を使用します。

4

2 に答える 2

5

同僚が解決策を発見しました。次のコード行が原因でした。

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

私はこれを使用しました:

PRIMARY KEY  (`id`),

そして、それは正しく動作します。

それは私が推測するMySQLの問題です。そうではなく、私のテーブル設計のバグです。

于 2010-01-16T11:11:30.210 に答える
0

print_r($city->get('id'));より多くの情報を保持しますか?

于 2010-01-16T10:57:43.680 に答える