2013-05-14 12 views
10

मेरे पास तीन टेबल हैं: उपयोगकर्ता, आइटम और उपयोगकर्ता_इटम्स। उपयोगकर्ता के पास कई आइटम होते हैं और एक आइटम कई उपयोगकर्ताओं से संबंधित होता है।लार्वेल 4 eloquent पिवट तालिका

टेबल:

Users 
id 
username 
password 

Items 
id 
name 
equipable 

User_items 
id 
user_id 
item_id 
equipped 

मॉडल:

class User extends Eloquent { 
    public function items() 
    { 
     return $this->belongsToMany('Item', 'user_items') 
        ->withPivot('equipped'); 
    } 
} 

class Item extends Eloquent { 
    public function users() 
    { 
     return $this->belongsToMany('User', 'user_items'); 
    } 
} 

धुरी (user_items) तालिका में मैं एक बहुत ही महत्वपूर्ण स्तंभ "सुसज्जित" नाम दिया है।

मेरे पास एक ऐसा फॉर्म है जहां उपयोगकर्ता लैस, असमान और आइटम फेंक सकते हैं। इस फ़ॉर्म में पिवट (user_items) तालिका पंक्ति आईडी के साथ एक छिपी हुई फ़ील्ड है। इसलिए, जब कोई उपयोगकर्ता किसी आइटम को लैस करने का प्रयास करता है, तो सिस्टम जांचता है कि आइटम उपयुक्त है या नहीं।

तो, मैं पिवट डेटा से आइटम_आईड के आधार पर पिवट डेटा और आइटम डेटा के साथ एक वस्तु चाहता हूं, मैं हैंडलर को भेज सकता हूं (जहां सभी तर्कों को संभाला जाता है)।

तो मुझे सबसे पहले पिवट तालिका तक पहुंचने और फिर आइटम तालिका तक पहुंचने के लिए क्या करना है।

कुछ इस तरह (काम नहीं करता है):

$item = User::find(1)->items->pivot->find(1); 

ऐसा करना संभव है?

उत्तर

22

आपको पहले अपने धुरी फोन पर 'equipable' शामिल करने के लिए है:

return $this->belongsToMany('User', 'user_items') 
      ->withPivot('equipable'); 

तो फिर तुम सुवक्ता पूछ सकते हैं यदि आपके आइटम equipable है या नहीं:

$item = User::with('items')->get()->find(1)->items->find(2)->pivot->equipable; 

मन में दो बातों का ध्यान रखें:

  1. एलोक्वेंट 'आइटम' को आंतरिक रूप से एक कुंजी के रूप में उपयोग करता है, जिससे हस्तक्षेप हो सकता है।
  2. "get()" से पहले जो भी तरीका आपने डाला है वह डीबी क्वेरी का हिस्सा है। ऑब्जेक्ट पर PHP द्वारा "get()" को संभालने के बाद सबकुछ संभाला जाता है। उत्तरार्द्ध ज्यादातर मामलों में धीमा हो जाएगा।
+2

धन्यवाद! इससे मुझे मदद मिली - डेस्क से मेरे सिर को टक्कर देने के 2 घंटे बाद। अधिक जानकारी के लिए –

+0

http://laravel.com/docs/eloquent#working-with-pivot-tables –

+0

देखें :) हाँ! मुझे एहसास हुआ कि मैं "-> पिवट" भूल गया था। +1 – rofavadeka

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