2015-05-27 9 views
5

iyi uygulamalar, bu yüzden, kaskad eylemi silmek çağırmak olamaz. Aynı zamanda, yii2 uygulamamdaki ilgili kayıtları silmek istiyorum. Bunu nasıl yapabilirim?Sil ilgili kayıtlar - <em>MyISAM</em> bunu desteklemediği için My veritabanı</em> motor kaputu altında <em>MyISAM kullanan

+0

Olası kopyası [Yii2: Veri tabanından ilgili modellerin verileri nasıl silinmeli?] (Https://stackoverflow.com/questions/31110462/yii2-how-to-simultaneously-delete-related-models-data- veri tabanından) –

cevap

1

Not: çözümü, yalnızca ActiveRecord delete method'u kullanırsanız çalışacaktır.

beforeDelete yöntemini kullanabilir ve ilgili kayıtları buradan silebilirsiniz - bu durumda kodu bir kez yazacaksınız ve her defasında $model->delete() numaralı telefonu aradığınızda yürütülecektir.

Veya EVENT_BEFORE_DELETE etkinliğine işleyici ekleyebilirsiniz.

+1

Geç cevap için özür dilerim. Her şeyden önce optimizasyonun veritabanının kendisine (doğru indeksler vb.) Bağlı olduğunu düşünüyorum. Bir seçenek olarak, ilgili kayıtları silen ve bu prosedürü çağıran saklı yordam yaratabilirsiniz ... – rkm

+1

Tetikleyiciler oluşturmaya ne dersiniz? –

+0

https://stackoverflow.com/questions/31110462 sayfasına bakın. –

2

Bu sorunu gidermek için birkaç seçenek vardır.

1) DB tarafında trigger oluşturun:

public function beforeDelete() { 
    if (!parent::beforeDelete()) { 
     return false; 
    } 
    // ... custom code here ... 
    return true; 
} 

Tetikleyiciler başvuru bütünlüğü zorlanarak daha hızlı ve iyi, işte bu yüzden: yii2 beforeDelete işlevi içinde

CREATE TRIGGER trigger_name 
BEFORE DELETE ON table_name FOR EACH ROW 

BEGIN  
    -- variable declarations  
    -- trigger code  
END; 

2) Sil ilgili kayıtlar Onları seçtim.

İlgili konular