1

我有两张桌子

表销售:

 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

我问我如何在 sale_line 上插入一条具有相同 id_sale 的记录,当我在 sale 上创建新记录时。我知道这是一个很大的问题,但我真的被困在这里,我可以在官方 ZF 文档上找到这个例子,所以任何人都可以帮助我提出建议或参考完整的例子来解释我的案例

十分感谢

4

1 回答 1

2

有几种方法可以做到这一点。最简单的可能是在您第一次插入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假设您在sale表中的主键上使用自动递增,该方法将返回最后生成的 ID。

或者,您可以在存储过程中使用LAST_INSERT_ID(). 由于表的性质,您可能希望指定要插入sale_ligne表中的数据(即值不等于默认列值)。否则,也许可以在sale表上添加一个插入触发器并在该触发器中进行插入。但是,第一种方法或在存储过程中会更容易实现,并为您提供更多控制权,并使其他开发人员更容易理解您的流程流程。

于 2013-07-30T11:16:05.477 回答