我有两张桌子
id_sale int
id_projet int
price float
date date
id_sale_ligne int
id_sale int FK_SALE
id_projet int
price float
date date
我问我如何在销售时创建新记录时在sale_line上插入具有相同id_sale的记录。 我知道这是一个很大的问题,但我真的卡在这里,我可以在官方的ZF文档中找到这个例子,所以任何人都可以帮我提出建议或参考完整例子来解释我的案例
非常感谢
答案 0 :(得分:2)
有几种方法可以实现这一目标。最简单的一个可能是在第一次插入sale
后执行另一个SQL查询。你可以这样做:
// 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
表上添加插入触发器并在该触发器中进行插入。但是,第一种方法或存储过程中的方法更容易实现,并为您提供更多控制,并使您的流程更易于理解其他开发人员。