РЕДАКТИРОВАТЬ: Этот заголовок вопроса изначально был: Как Doctrine узнал последний вставленный идентификатор в MySQL? и был связан с Doctrine ORM mapper. После некоторого поиска я обнаружил, что этот вопрос не относится к Doctrine , но PDO_MySQL , MySQL C API и, наконец, к клиент-серверному взаимодействию MySQL. Я решил изменить название, поэтому, возможно, кто-то найдет ответ на свой вопрос.
Для тех, кто не использует Доктрину: мне было любопытно, почему ниже:
mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();
или аналогичный:
$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();
приведет только к одной позиции (без отдельной SELECT LAST_INSERT_ID()
) в журнале:
1701 Query INSERT INTO category (name) VALUES ('cat')
Оригинальный вопрос:
У меня есть 2 таблицы:
category(id,name)
product(id, name, categoryId)
Я создал новый объект категории и объект продукта. Я назначил объект категории для объекта продукта. Я не устанавливал идентификаторы:
$product = new Product();
$product->name = 'asdf';
$category = new Category();
$category->name = 'cat';
$product->Category = $category;
После этого я сбросил соединение и проверил логи 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
Как Доктрина узнала, что недавно созданный идентификатор категории - 312? В логах больше ничего нет.