插入与 Doctrine 相关的记录后获取 ID

发布于 2024-08-17 16:53:41 字数 1548 浏览 1 评论 0原文

使用 PHP Doctrine 项目插入新记录后,我在获取 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
)

Why the ID is empty!, 其中该行插入成功!。 我需要这个来进行更多基于 city.id 的插入,就像以该城市为父级的另一个区域一样。

请注意,使用 $city->id 会导致此错误: 警告:在 Doctrine/Record.php 第 1151 行为 foreach() 提供的参数无效

数据库 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。

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.

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

坚持沉默 2024-08-24 16:53:41

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

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

我使用了这个:

PRIMARY KEY  (`id`),

并且它工作正常。

我猜这是 MySQL 问题。事实并非如此,这是我的表格设计中的错误。

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.

后知后觉 2024-08-24 16:53:41

print_r($city->get('id')); 是否包含更多信息?

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文