在zf2上同时在2个表上添加数据

时间:2013-07-30 09:46:38

标签: php zend-framework2

我有两张桌子

表销售:

 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的记录。 我知道这是一个很大的问题,但我真的卡在这里,我可以在官方的ZF文档中找到这个例子,所以任何人都可以帮我提出建议或参考完整例子来解释我的案例

非常感谢

1 个答案:

答案 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表上添加插入触发器并在该触发器中进行插入。但是,第一种方法或存储过程中的方法更容易实现,并为您提供更多控制,并使您的流程更易于理解其他开发人员。