假设我有 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
存在。