2017-05-10 18 views
6

लैरवेल में कुछ डेटा मॉडल संबंधों के बारे में एक त्वरित क्वेरी।morphTo और hasMany Laravel

मेरे पास एक उत्पाद है, जो एक उपयोगकर्ता से संबंधित है, लेकिन एक उपयोगकर्ता के पास कई उत्पाद हो सकते हैं। लेकिन एक उत्पाद में भी बहुत से लोग उस उत्पाद पर प्रस्ताव दे सकते हैं;

class Product extends Model 
{ 
    public function user(){ 
     return $this->belongsTo('App\User'); 
    } 
    public function offer(){ 
     return $this->hasMany('App\Offer'); 
    } 

लेकिन एक उत्पाद भी उत्पाद के विभिन्न उप प्रकार हो सकता है, उदाहरण के लिए, एक एक वाहन है, या एक मोबाइल फोन, मेरे प्रवास में विभिन्न स्तंभों के साथ एक हो सकता है, तो मैं मैं रूप में कई

जरूरत मान

Product.php

public function imageable() 
{ 
    return $this->morphTo(); 
} 

में Vehicle.php

public function products() 
{ 
    return $this->morphMany('App\Product', 'imageable'); 
} 
में

हालांकि, जब बुला:

$product = Product::findOrFail($id); 

जब मैं की तरह $product->vehicle

कुछ भी मैं उत्पादों की मेज पर imageable_id करने के लिए अपने डेटाबेस में वाहन की आईडी जोड़ने कर प्रयास मैं अशक्त मिलता है, और imageable प्रकार के उत्पाद तालिका पर 'वाहन' भी।

मैं यहाँ क्या गलत कर रहा हूं?

उत्तर

5

सब कुछ सही तुम सिर्फ imageable के माध्यम से उस तक पहुंचने में किया जाना चाहिए दिखता है:

$product = Product::findOrFail($id); 
return $product->imageable; 

से Laravel documentation:

तुम भी द्वारा बहुरूपी मॉडल से एक बहुरूपी संबंध के मालिक प्राप्त कर सकते हैं विधि का नाम एक्सेस करना जो को मॉर्फ करने के लिए कॉल करता है।

आपके मामले में morphTo पर कॉल करने वाली विधि छवि योग्य है।

+0

मुझे और धन्यवाद देने के लिए धन्यवाद, हालांकि अब मुझे 'कक्षा' वाहन 'नहीं मिला' – iLC

+0

आप पॉलिमॉर्फिक तालिका में डेटा कैसे संग्रहीत कर रहे हैं? डेटाबेस में imageable_type इस तरह होना चाहिए: 'ऐप \ वाहन' –

+0

आह आप सही हैं यह डेटाबेस में ऐप \ वाहन था, धन्यवाद चेस !! (जब मुझे एसओ देता है तो मैं सही चिह्नित करूंगा) – iLC