2017-06-20 59 views
5

मैं ऐसी साइट पर काम कर रहा हूं जिसने मॉडल बढ़ाया है, उदाहरण के लिए।विस्तारित मॉडल के साथ लैरवेल वालो रिश्ते

class Asset extends Model { 

    public function project() { 
    return $this->belongsTo(Project::class); 
    } 
} 

class Video extends Asset { 

} 

Laravel आराम करना होगा मैं विस्तारित वर्ग के साथ एक ही belongsTo सुवक्ता संबंध स्थापित करने की जरूरत है, या यह हो रही माता पिता वर्ग के आधार पर करते हैं?

इसके अतिरिक्त, क्या ऐसे दस्तावेज कहीं भी हैं जो इस तरह के रिश्तों को व्यवस्थित करने के बारे में विस्तार से बताते हैं (यानी नियंत्रकों के मामले में)? मुझे Laracasts वेबसाइट (आमतौर पर उत्कृष्ट) पर कुछ भी नहीं मिल रहा है।

+1

यदि आप प्रोजेक्ट को ओवरराइड नहीं करते हैं तो यह माता-पिता से विरासत में प्राप्त होगा। – apokryfos

+0

इस पोस्ट पर एक नज़र डालें: https://stackoverflow.com/questions/4961906/when-to-implement-and-extend –

उत्तर

2

आपको विस्तारित विधि को दो बार उदाहरण की आवश्यकता नहीं है, जब तक कि आप इसे किसी भिन्न व्यवहार से ओवरराइड नहीं करना चाहते।

मैं व्यक्तिगत रूप से अपने अनुप्रयोगों में बहुत सारी विरासत का उपयोग करता हूं, और यह वैसे ही काम करता है जैसा आप उम्मीद करेंगे, प्रत्येक संबंध माता-पिता के डिफ़ॉल्ट मानों या आपके द्वारा घोषित विशिष्ट संरक्षित चर का उपयोग करके काम करता है और पूछताछ करता रहता है।

उदाहरण के लिए, यदि आप संरक्षित $table = 'foo' घोषित करते हैं, तो बच्चा उस चर को अपनी क्वेरी करने के लिए भी ले जाएगा, या आप बच्चे को एक अलग तालिका से पूछने के लिए बच्चे को ओवरराइड कर सकते हैं।

दस्तावेज़ीकरण के मामले में, आपको अधिक जानकारी नहीं मिल रही है, मुझे लगता है कि ऐसा इसलिए है क्योंकि यह एक फ्रेमवर्क विशिष्ट से अधिक PHP और ओओपी मुद्दा है।

आप बहुरूपी संबंधों, जो वास्तव में एक आम तरीका है अपने एसक्यूएल में एकाधिक वंशानुक्रम लागू करने के लिए कर रहे हैं की घोषणा करना चाहते हैं, Laravel अपनी पीठ, विशिष्ट Eloquent relations और migration commands, $table->morphs('asset'); की तरह साथ है।

उम्मीद है कि यह आपकी मदद करता है।

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