我的问题如下。
从表中删除多行后,将新记录插入同一个表会导致错误。
Database Error
Error: SQLSTATE[42P01]:
Undefined table: 7 ERROR: relation "order_details_id_seq" does not exist
桌子
CREATE TABLE schema.order_details (
id serial NOT NULL,
order_id integer NOT NULL,
field_1 integer,
field_2 real,
field_3 character varying(15),
CONSTRAINT order_details_pkey PRIMARY KEY (id )
)
WITH (
OIDS=FALSE
);
插入是
INSERT INTO "schema"."order_details" ("order_id", "field_1", "field_2", "field_3")
VALUES (37, 1, 2, 'value');
存在使用的模式中的序列“模式”。“order_details_id_seq”。
CREATE SEQUENCE schema.order_details_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 37
CACHE 1;
楷模。
// Model
class Order extends AppModel {
public $useDbConfig = 'other_data';
public $hasMany = array(
'OrderDetail' => array(
'className' => 'OrderDetail',
'foreignKey' => 'order_id',
'dependent' => true,
'order' => array(
'OrderDetail.order_id',
'OrderDetail.field_1'
))
);
class OrderDetail extends AppModel {
public $useDbConfig = 'other_data';
public $belongsTo = array(
'Order' => array(
'className' => 'Order',
'foreignKey' => 'order_id',
'dependent' => true
),
// model Order save code on recreation of order
$this->OrderDetail->deleteAll(array('OrderDetail.order_id' => $this->id));
此时尝试插入$this->OrderDetail->query('VACUUM FULL ANALYZE order_details');
没有效果
foreach ($details as $d) {
$this->OrderDetail->create();
$this->OrderDetail->save($d /*array(
'order_id' => $this->id,
'field_1' => 1,
'field_2' => 2,
'field_3' => 'value'
)*/);
}
我在第一个 foreach 循环中出错。最奇怪的是,这个问题会在一段时间后随机出现和消失。
关于它可能是什么以及如何摆脱它的任何建议?
目前使用代码解决的问题。
$this->Order->id = $id;
$this->Order->delete();
它为删除语句的每一行(在我的情况下额外 100 个!)触发 2 个查询,而不是在
$this->OrderDetail->deleteAll(array('OrderDetail.order_id' => $id));
所以这次它有改进的空间。
编辑:当前代码可以正常工作,因为它应该与调整DboSource
的 .