2013-07-20 14 views
5

मैं एक अनुकूलित डेटाबेस संरचना का उपयोग कर एक लार्वा ऐप बनाने की कोशिश कर रहा हूं। मेरे पास टेबल types, units, content है, और relations नामक एक पिवट तालिका है। relations तालिका की संरचना इस तरह है:एलोक्वेंट ओआरएम/लैरावेल - कस्टम पिवट टेबल संरचना का उपयोग करें

--------------------------------------------- 
| id | relation_type | first_id | second_id | 
--------------------------------------------- 
| 1 | type_unit |  1 | 2  | 
--------------------------------------------- 
| 2 | unit_content |  2 | 3  | 
--------------------------------------------- 

दूसरे शब्दों में, पहले तीन टेबल आपस में कई-से-अनेक संबंध है, और चौथा एक सब संबंधों के लिए पिवट तालिका है। मैं इस पिवट तालिका संरचना के साथ Eloquent की BelongsToMany विधि का उपयोग कैसे कर सकता हूं, यानी मैं दिए गए संबंध से संबंधित केवल पिवट तालिका के रिकॉर्ड का चयन कैसे कर सकता हूं? उदाहरण के लिए, कैसे मैं इस में केवल type_unit संबंधों का प्रयोग करेंगे:

class Type extends Eloquent { 

    public function units() 
    { 
     return $this->belongsToMany('Unit', 'relations'); 
    } 

} 

लेकिन एक ही समय में unit_content संबंधों पर ध्यान न दें?

उत्तर

12

belongsToMany तीसरे और चौथे तर्क स्वीकार करेगा। आप दस्तावेज में इसे देख सकते हैं: http://laravel.com/docs/eloquent#relationships

लेकिन बात यह है कि दस्तावेज में नहीं है कि आप where जैसी क्वेरी बिल्डर कार्यों चेनिंग, के आधार पर आपके संबंध में रोके सकता है orderBy आदि

तो अपने कोड की तरह कुछ होगा :

class Type extends Eloquent { 

    public function units() 
    { 
     return $this->belongsToMany('Unit', 'relations', 'first_id', 'second_id') 
      ->withPivot(['relation_type']) 
      ->where('relations.relation_type', '=', 'type_unit'); 
    } 

} 
+0

उमट आप एक स्टार हैं, धन्यवाद! –

+0

खुशी है कि मैं मदद कर सकता हूं। :) –

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