、、という 3 つsales_order
のテーブルがあり、ON UPDATE = NO ACTION ON DELETE = NO ACTION に設定されているとします。sales_order_items
invoice
ここで、販売注文を削除できるようにする必要があります。しかし、他のテーブルに関係が存在する場合は、その販売注文が他の場所で使用されていることを意味し、削除を防ぐ必要があります。
例: sales_order_id = 34 があり、他のテーブルに存在することを確認したい。
以前は、以下のようなトランザクションを使用して同じことを達成しました
$db = new database();
//start transaction
$db->start_trans();
//try to delete the sales order with ID = 34
$db->exec( 'DELETE FROM SALES_ORDER WHERE ID = 34' );
//check transaction success or failure
if( $db->trans_status() == true ){
//THERE IS NO RELATION EXISTS
//ROLLBACK
$db->rollback_trans();
#Soft Delete the record
$db->exec( 'UPDATE sales_order SET is_deleted = 1 WHERE id = 34' );
}else{
//RELATION EXISTS FOR ID = 34 IN SOME OTHER TABLES
}
上記のコードは機能しますが、問題はsales_order_items
. これはの子テーブルであるため、sales_order
内容がある場合、トランザクションは失敗し、else 部分を実行しようとします。
しかし、実際sales_order_items
にはのプロパティでsales_order
あり、その特定の sales_order を削除する必要があります (アイテムは気にしません)。
私はこのようなものを期待しています
$relations = $db->get_relation( 'sales_order.id', '34' );
期待される出力
array( 'sales_order_items','invoice','another_table' .... );
注: 上記は単なる例です。多数のテーブルがあり、各テーブルを調べてID
存在を確認することはできません。