私の問題は次のとおりです。
テーブルから複数の行を削除した後、同じテーブルに新しいレコードを挿入するとエラーが発生します。
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');
使用されているスキーマにシーケンス"schema"。"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();
削除ステートメントの行ごとに2つのクエリを実行します(私の場合は100を追加します)。
$this->OrderDetail->deleteAll(array('OrderDetail.order_id' => $id));
したがって、今回は改善の余地があります。
編集:現在、コードは微調整すると正常に機能しDboSource
ます。