2013-09-05 7 views
5

मैं सभी निर्भर rable रिकॉर्डCakePHP में बहु स्तर हटाएँ (श्रृंखला हटाना)

मेरे संघ

शाखा मॉडल

var $hasMany =array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_BR_ID', 
     'dependent' =>true 
    ) 
); 

Dealbranch मॉडल

var $belongsTo = array(
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'DL_ID', 
     'dependent' => true 
    ), 
    'Branch' => array(
     'className' => 'Branch', 
     'foreignKey' => 'DLB_BR_ID', 
    ) 
); 
हटाना चाहते हैं

डील मॉडल

var $hasMany = array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_DL_ID', 
    ) 
); 

नियंत्रक में मैं

$this->Branch->delete($id,true); 

अब यहाँ का इस्तेमाल किया है whem मैं शाखा को हटाने कर रहा हूँ, इसलिए निर्भर dealbranch सफलतापूर्वक नष्ट कर दिया, लेकिन किसी भी सौदे रिकॉर्ड से कोई भी नष्ट कर दिया

मैं चाहता हूँ जैसे: whem मैं शाखा को हटा रहा हूं, इसलिए सभी आश्रित डीलब्रैंच को हटा दिया जाना चाहिए और सभी आश्रित (डीलब्रैंच पर निर्भर) सौदा रिकॉर्ड हटाया जाना चाहिए

यहाँ सौदा Dealbranch और Dealbranch के बच्चे है शाखा के बच्चे है

अब, एक शाखा के लिए वहाँ Dealbranch में कई रिकॉर्ड हैं, और कई Dealbranch के लिए डील

enter image description here

में एक रिकॉर्ड नहीं है कृपया मेरी मदद करो। मैं CakePHP का उपयोग कर रहा 2

उत्तर

0

सभी मॉडल रिकॉर्ड Branch साथ

$this->Branch->delete($id,true);

का उपयोग कर मुझे लगता है कि आप अपने मॉडल तो शाखा रिकॉर्ड के हटाने पर सौदा रिकॉर्ड को निकालना चाहते हैं द्वारा जुड़े रहे हैं हटाया जा सकता है BranchDeal मॉडल से जुड़ा होना चाहिए।

बस इस

शाखा मॉडल

var $hasMany =array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_BR_ID', 
     'dependent' =>true 
    ), 
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'your_foriegn_key', 
     'dependent' =>true 
    ) 

); 

की तरह जोड़ने की कोशिश या आप की तरह इस

अद्यतन कोशिश कर सकते हैं:

आपकी आवश्यकता यहाँ डील के अनुसार डीलब्रैंच और डी का बच्चा है अलब्रंच शाखा का बच्चा है, आपके मॉडल एसोसिएशन इस तरह होना चाहिए।

सौदा शाखा मॉडल इस तरह होना चाहिए।

DealBranch मॉडल

var $belongsTo = array(
    'Branch' => array(
     'className' => 'Branch', 
     'foreignKey' => 'DLB_BR_ID', 
    ) 
); 
var $hasMany = array(
    'Deal' => array(
     'className' => 'Deal', 
     'foreignKey' => 'DL_ID', 
     'dependent' => true 
    ), 
); 

सौदा मॉडल इस तरह होना चाहिए।

डील मॉडल

var $belongsTo = array(
    'Dealbranch' => array(
     'className' => 'Dealbranch', 
     'foreignKey' => 'DLB_DL_ID', 
    ) 
); 
+0

लेकिन शाखा और सौदा –

+0

के बीच कोई सीधा संबंध नहीं है, एक संबंध होना चाहिए 'शाखा' को हटाने पर 'डील' को हटाने के लिए, अन्यथा आपको सौदा रिकॉर्ड –

+0

ठीक करने के लिए मैन्युअल रूप से कोड लिखना होगा, इसका मतलब है कि हम रिकर्सली (पेड़) को हटा नहीं सकते? –

0

मैं जानता हूँ कि CakePHP पर लोगों को अपने डेटाबेस में विदेशी कुंजी का उपयोग नहीं करते हैं और भरोसा ढांचे पर अपने मामले में इन विवरणों का ख्याल रखना, अगर ढांचे दे रही है जबकि आप समस्याएं हैं और आपके डेटाबेस पर नियंत्रण है, डीएलईटीई डीबी संचालन पर कैस्केड पर अपनी विदेशी कुंजी बाधाओं को अपडेट करें।

0

मूल समस्या आपके डेटा मॉडल में है। आपके मॉडल के मुताबिक, किसी भी शाखा को शून्य या अधिक सौदों से जोड़ा जा सकता है और इसके विपरीत। इस प्रकार यदि आप एक शाखा हटाते हैं, तो किसी भी सौदे को हटाने का कोई मतलब नहीं है, क्योंकि सौदा किसी अन्य शाखा से संबंधित हो सकता है। यदि सौदा हटा दिया गया था, तो डेटाबेस अखंडता दूषित हो जाएगी।

आपके द्वारा उपयोग की जाने वाली सेटिंग का उपयोग अक्सर एम: एन रिलेशनशिप मॉडल के लिए किया जाता है।

पूरी तस्वीर यदि आपका डेटा मॉडल:

original model

और क्या तुम सच में मतलब:

new model

शाखा मॉडल

var $hasMany =array(
'Deal' => array(
    'className' => 'Deal', 
    'foreignKey' => <set_according_to_your_column_names>, 
    'dependent' =>true 
    ) 
); 

डील मॉडल

var $hasMany = array(
'Branch' => array(
    'className' => 'Dealbranch', 
    'foreignKey' => <set_according_to_your_column_names>, 
) 
); 

इस तरह, आप कर सकते हैं केवल नियंत्रक कॉल में:

$this->Branch->delete($id,true); 

या यहाँ तक कि

$this->Branch->delete($id); 

के बाद से दूसरा पैरामीटर डिफ़ॉल्ट रूप से सच है।


एम के

उदाहरण: एन संबंध व्यक्ति है - पता। कोई भी एक से अधिक पते (जैसे घर और काम) का उपयोग कर सकता है और एक पते को अधिक लोगों (परिवार, सहयोगियों) द्वारा साझा किया जा सकता है।

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