EDITAR: Este título de pregunta era originalmente: ¿Cómo sabe Doctrine la última identificación insertada en MySQL? y se relacionó con Doctrine ORM mapper. Después de algunas excavaciones descubrí que esta pregunta no está relacionada con Doctrine sino a PDO_MySQL, MySQL C API y finalmente - a la comunicación cliente-servidor MySQL. He decidido cambiar el título, por lo que tal vez alguien encuentre la respuesta a la pregunta de él/ella.¿Cómo sabe PDO la última identificación insertada en MySQL?
Para aquellos que no están usando Doctrina: Tenía curiosidad, ¿por qué a continuación:
mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();
o similar:
$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();
dará lugar a una sola posición (sin separada SELECT LAST_INSERT_ID()
) en el registro:
1701 Query INSERT INTO category (name) VALUES ('cat')
pregunta original:
Tengo 2 tablas:
category(id,name)
product(id, name, categoryId)
creé nueva categoría de objetos y objetos producto. Asigné un objeto de categoría al objeto del producto. Yo no puse ningún ID:
$product = new Product();
$product->name = 'asdf';
$category = new Category();
$category->name = 'cat';
$product->Category = $category;
Después de eso, tiraba la conexión y comprobar los registros de MySQL:
1684 Query START TRANSACTION
1684 Query INSERT INTO category (name) VALUES ('cat')
1684 Query INSERT INTO product (name, categoryid) VALUES ('asdf', '312')
1684 Query COMMIT
¿Cómo Doctrina saber, que la categoría de Identificación del recién creado es 312? No hay nada más en los registros.
Gran investigación. – jensgram
Es por eso que podemos usarlo, sin temor a la raza de la consulta. Gracias. – noober