これを実現するにはいくつかの方法があります。最も簡単な方法は、最初の への挿入後に別の SQL クエリを実行することsaleです。次のようなことができます。
// Insert sale and get the ID
$this->dbAdapter->query('INSERT INTO sale (price, date) VALUES (?, ?)', array('price', 'date'));
$salesId = $this->dbAdapter->getDriver()->getLastGeneratedValue();
$this->dbAdapter->query('INSERT INTO sale_ligne (price, date, id_sale) VALUES (?, ?, ?)', array('price', 'date', $salesId));
上記の例では、エラー処理が省略されていることに注意してください。このgetLastGeneratedValueメソッドは、テーブルの主キーで自動インクリメントを使用していると仮定して、最後に生成された ID を返しsaleます。
または、 を使用して、ストアド プロシージャで同じことを行うこともできますLAST_INSERT_ID()。テーブルの性質上、テーブルに挿入するデータを指定する必要がある場合がありsale_ligneます (つまり、値がデフォルトの列値と等しくない場合)。saleそれ以外の場合は、テーブルに挿入トリガーを追加し、そのトリガー内で挿入を行うことがおそらく可能です。ただし、最初の方法またはストアド プロシージャ内の方法は、実装が容易であり、より多くの制御が可能になるだけでなく、他の開発者がプロセスの流れを理解しやすくなります。