2015-05-27 5 views
5

मेरे डेटाबेस हुड के नीचे इंजन MyISAM का उपयोग करता है, तो मैं, झरना कार्रवाई को नष्ट आह्वान नहीं कर सकते क्योंकि MyISAM इसका समर्थन नहीं करता। उसी समय, मैं अपने yii2 एप्लिकेशन में संबंधित रिकॉर्ड हटाना चाहता हूं। मैं उसे कैसे कर सकता हूँ?हटाएँ संबंधित रिकॉर्ड - सर्वोत्तम प्रथाओं

+0

संभावित डुप्लिकेट [Yii2: डेटा आधार से संबंधित मॉडल डेटा को एक साथ कैसे हटाएं?] (Https://stackoverflow.com/questions/31110462/yii2-how-to-sultultaneously-delete-related-models- डेटा- डेटा-बेस-बेस) –

उत्तर

1

नोट: समाधान के नीचे केवल तभी काम करेगा यदि आप ActiveRecord delete method का उपयोग करते हैं।

आप beforeDelete विधि का उपयोग कर सकते हैं और वहां संबंधित रिकॉर्ड्स हटा सकते हैं - इस मामले में आप एक बार कोड लिखेंगे और जब भी आप $model->delete() पर कॉल करेंगे तो इसे निष्पादित किया जाएगा।

या आप EVENT_BEFORE_DELETE घटना के लिए हैंडलर जोड़ सकते हैं।

+1

देर से प्रतिक्रिया के लिए खेद है। मुझे लगता है कि सभी अनुकूलन में से पहले डेटाबेस पर ही निर्भर करता है (सही इंडेक्स इत्यादि)। एक विकल्प के रूप में आप संग्रहीत प्रक्रिया बना सकते हैं जो संबंधित रिकॉर्ड हटा देता है और उस प्रक्रिया को कॉल करता है ... – rkm

+1

ट्रिगर्स बनाने के बारे में क्या? –

+0

https://stackoverflow.com/questions/31110462 देखें –

2

कई विकल्प इस मुद्दे के समाधान के लिए कर रहे हैं।

1) डीबी तरफ एक trigger बनाएँ:

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

ट्रिगर तेज, और रेफेरेंन्शिअल सत्यनिष्ठा को लागू करने में अच्छे हैं, कि क्यों है:

CREATE TRIGGER trigger_name 
BEFORE DELETE ON table_name FOR EACH ROW 

BEGIN  
    -- variable declarations  
    -- trigger code  
END; 

2) हटाएँ yii2 beforeDelete समारोह के अंदर संबंधित रिकॉर्ड मैंने उन्हें चुना।

संबंधित मुद्दे