編集:この質問のタイトルは元々次のとおりでした:DoctrineはMySQLに最後に挿入されたIDをどのように知っていますか?DoctrineORMマッパーに関連していました。少し掘り下げてみると、この質問はDoctrineではなく、PDO_MySQL、MySQL C API、そして最後にMySQLクライアントサーバー通信に関連していることがわかりました。タイトルを変更することにしたので、誰かが自分の質問に対する答えを見つけるかもしれません。
Doctrineを使用していない人のために:私は興味がありました、なぜ以下のように:
mysql_query("INSERT INTO category (name) VALUES('cat')");
echo mysql_insert_id();
または類似:
$pdo->exec("INSERT INTO category (name) VALUES('cat')");
echo $pdo->lastInsertId();
ログ内の1つの位置(個別のなし)のみにつながりSELECT LAST_INSERT_ID()ます:
1701 Query INSERT INTO category (name) VALUES ('cat')
元の質問:
私は2つのテーブルを持っています:
category(id,name)
product(id, name, categoryId)
新しいカテゴリオブジェクトと製品オブジェクトを作成しました。カテゴリオブジェクトを製品オブジェクトに割り当てました。IDを設定しませんでした:
$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であることをどのようにして知りましたか?ログには他に何もありません。
