symfony2 - obtener ultimo id insertado mysql php
Obtener ID después de insertar un registro que tenga relación en Doctrine (2)
Hace print_r($city->get(''id''));
mantener más información?
Tengo problemas para obtener el ID después de insertar un nuevo registro usando el Proyecto PHP Doctrine.
Al insertar un nuevo registro en una tabla sin tabla principal (sin clave externa), no ocurre ningún problema. Pero cuando inserto un registro relacionado aquí viene el problema, que obtengo solo el identificador padre que es inútil en mi caso.
Ejemplo de código PHP:
$city = new City();
$city->name = "Baghdad";
$city->country_id = 6;
$city->save();
print_r($city->identifier());
exit;
El resultado es:
Array
(
[id] =>
[country_id] => 6
)
¡Por qué el ID está vacío !, donde la fila se insertó con éxito !. Necesito esto para hacer más inserciones basadas en city.id, como en otras áreas que tienen a esta ciudad como padre.
Nota usando el $city->id
causa este error: Warning: Invalid argument supplied for foreach() in Doctrine/Record.php on line 1151
Volcado de base de datos 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;
Por cierto: estoy usando el método Doctrine::generateModelsFromDb()
para generar clases de modelo ORM.
PD: utilizando la versión 1.2.1 de Doctrine, mysql: innodb 5.0.75-0ubuntu10.2 y php 5.2.6-3ubuntu4.5.
Un compañero de trabajo descubrió la solución. Fue por esta línea de código:
PRIMARY KEY (`id`,`country_id`),
Usé esto:
PRIMARY KEY (`id`),
Y funciona correctamente
Es un problema de MySQL, supongo . No lo es, es un error en el diseño de mi mesa.