これを実現するにはいくつかの方法があります。最も簡単な方法は、最初の への挿入後に別の 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
それ以外の場合は、テーブルに挿入トリガーを追加し、そのトリガー内で挿入を行うことがおそらく可能です。ただし、最初の方法またはストアド プロシージャ内の方法は、実装が容易であり、より多くの制御が可能になるだけでなく、他の開発者がプロセスの流れを理解しやすくなります。