【发布时间】:2014-06-25 09:26:34
【问题描述】:
我在使用 postgresql 事务(使用 codeigniter)时遇到问题,这里是涉及的表:
CREATE TABLE factura(
nro_factura serial NOT NULL,
fecha_emision date NOT NULL,
(... more columns)
PRIMARY KEY (nro_factura));
CREATE TABLE detalle(
id_articulo integer NOT NULL REFERENCES articulos(id) ON UPDATE CASCADE ON DELETE RESTRICT,
nro_factura integer NOT NULL REFERENCES factura(nro_factura) ON UPDATE CASCADE ON DELETE RESTRICT,
(... more columns)
PRIMARY KEY(id_articulo,nro_factura));
这就是交易:
$this->db->trans_start();
$queryFactura = $this->db->query("INSERT INTO factura (... all columns) VALUES (CURRENT_DATE,?,?,?,?,?,?,?,?,?,?,?,?)",$factura);
$id_factura = $this->db->query("SELECT nro_factura FROM factura WHERE id_vehiculo=?",array($factura['id_vehiculo']));
foreach ($articulos as $key){
$queryFactura = $this->db->query("INSERT INTO detalle (id_articulo,nro_factura,precio_venta,descuento,cantidad) VALUES (?,$id_factura,?,?,?)",$key);
}
$this->db->trans_complete();
现在,我无法执行 SELECT 查询,因为之前的插入尚未完成。如何在没有第一次插入的外键的情况下进行第二次插入?
编辑:2014 年 6 月 24 日
最后我使用了 postgre 的 currval() 函数。只需为此替换选择查询:
$id_factura = $this->db->query("SELECT currval(pg_get_serial_sequence('factura', 'nro_factura'))",array())->result()[0]->currval;
【问题讨论】:
标签: php sql codeigniter postgresql