EDIT: À l'origine, le titre de cette question était: Comment est-ce que Doctrine connaît le dernier identifiant inséré dans MySQL? et a été liée à Doctrine ORM mapper. Après quelques fouilles j'ai découvert que cette question n'est pas liée à Doctrine mais à PDO_MySQL, MySQL C API et enfin - à la communication client-serveur MySQL. J'ai décidé de changer le titre, alors peut-être que quelqu'un trouvera une réponse à sa question.Comment PDO connaît-il le dernier identifiant inséré dans MySQL?
Pour ceux qui n'utilisent pas Doctrine: J'étais curieux, pourquoi ci-dessous:
mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();
ou similaire:
$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();
conduira à une seule position (sans SELECT LAST_INSERT_ID()
séparée) dans le journal:
1701 Query INSERT INTO category (name) VALUES ('cat')
question d'origine:
J'ai 2 tables:
category(id,name)
product(id, name, categoryId)
J'ai créé nouvel objet de la catégorie et de l'objet produit. J'ai affecté l'objet catégorie à l'objet du produit. Je ne l'ai pas mis les ids:
$product = new Product();
$product->name = 'asdf';
$category = new Category();
$category->name = 'cat';
$product->Category = $category;
Après que je rougis la connexion et vérifier les journaux 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
Comment savoir Doctrine, que l'identifiant de la catégorie nouvellement créée est 312? Il n'y a rien d'autre dans les journaux.
Grande recherche. – jensgram
C'est pourquoi nous pouvons l'utiliser, sans crainte de course de requête. Je vous remercie. – noober