1

私は2つのテーブルを持っています

テーブル販売 :

 id_sale    int
 id_projet  int
 price      float
 date       date

テーブルsale_ligne:

id_sale_ligne  int
id_sale        int FK_SALE
id_projet      int
price          float
date           date

セールで新しいレコードを作成するときに、同じid_saleのレコードをsale_lineに挿入する方法を尋ねています。私はそれが大きな質問であることを知っていますが、私は本当にここで立ち往生しており、公式のZFドキュメントでこの例を見つけることができます。

まことにありがとうございます

4

1 に答える 1

2

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

于 2013-07-30T11:16:05.477 に答える