编辑:这个问题标题最初是:Doctrine如何知道MySQL中最后插入的id?并且与Doctrine ORM映射器有关.经过一番挖掘,我发现这个问题与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)
我创建了新的类别对象和产品对象.我将类别对象分配给产品对象.我没有设置任何ids:
$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
Doctrine如何知道,新创建的类别ID是312?日志中没有其他的东西.