2013-07-31 11 views
9

का उपयोग कर कई संबंधित तालिकाओं से परिणाम लौट रहा है मैं लैरवेल 4 का उपयोग कर रहा हूं और विशेष रूप से मैं ऐसे उत्तर की तलाश में हूं जो बोलने वाले ORM का उपयोग करता है।लैरवेल: eloquent

मैं एक मेज "कार्यों" जो कंटेनर एक client_id और एक user_id प्रत्येक पंक्ति करने के लिए आवंटित की है।

client_id एक "ग्राहकों" मेज पर एक ग्राहक के लिए संदर्भित करता है और user_id एक "उपयोगकर्ताओं" मेज पर एक उपयोगकर्ता को दर्शाता है।

मैं आपकी क्या अपेक्षाएं हैं: सभी कार्य दिखाने के लिए और प्रदर्शित "ग्राहकों" नाम और "उपयोगकर्ताओं" first_name

तो परिणाम मेरी (ब्लेड में इस प्रकार दिखाई देगा) देखें:

@foreach($tasks as $task) 
    <tr> 
     <td>{{ $task->user->first_name }}</td> 
     <td>{{ $task->client->name }}</td> 
     <td>{{ $task->description }}</td> 
    </tr> 
@endforeach 

उपर्युक्त दृश्य $ task-> क्लाइंट-> नाम पूरी तरह ठीक है लेकिन दुर्भाग्यवश एक "टी दिखाता है जब मैं लाइन $ जोड़ने गैर वस्तु की "संपत्ति प्राप्त करने के लिए rying task-> उपयोगकर्ता-> first_name

मेरे नियंत्रक इस तरह दिखता है:

$tasks = Task::with(array('user', 'client'))->get(); 
return View::make('index', compact('tasks')); 

मैं यह समझ के रूप में अपने मॉडल भी एक फर्क, तो मेरे मॉडल इस तरह दिखेगा:

class Task extends Eloquent { 
    protected $guarded = array(); 
    public static $rules = array(); 

    public function client() { 
     return $this->belongsTo('Client'); 
    } 

    public function user() { 
     return $this->belongsTo('User'); 
    } 
} 

और:

class User extends Eloquent implements UserInterface, RemindableInterface { 
    public function task() 
    { 
     return $this->hasMany('Task'); 
    } 
} 

और:

class Client extends Eloquent { 
    public function projects(){ 
     return $this->hasMany('Project', 'client_id'); 
    } 
} 

इस काम को कैसे करें इस पर कोई विचार है? मैं थोड़ी देर के लिए मेरे सिर खरोंच किया गया है - यह भी ध्यान रखें कि मैं एक डेटाबेस संबंध समर्थक इतना सरल व्याख्या नहीं कर रहा हूँ बेहतर :)

+0

पर अपने कोड की जांच कर सकते यह मेरे लिए प्रतीत होता है कि अगर आपकी कार्य तालिका एक कई-से-अनेक संबंध में पिवट तालिका है। क्लाइंट और उपयोगकर्ता को सीधे लिंक करने के लिए आपको शायद Eloquent's belongToMany() विधि का उपयोग करना चाहिए। अपनी पिवट तालिका में अतिरिक्त फ़ील्ड जोड़ने के तरीके के बारे में जानकारी के लिए [यह] (http://laravel.com/docs/eloquent#working-with-pivot-tables) देखें। – ciruvan

+0

हाय @ क्यूविज़क्रिस मैंने प्रलेखन पर एक नज़र डाली और मैं अपनी आवश्यकताओं के लिए उपयोगकर्ता/भूमिका/पिवट के उदाहरण का अनुवाद कैसे कर सकता हूं। क्या आप कह रहे हैं कि मुझे अपनी हैनी() से कई() में बदलना चाहिए? मैं यहाँ थोड़ा सा खो गया हूँ। – Josh

उत्तर

2

मैंने अभी इस के माध्यम से काम किया और खुद कुछ चीजें सीखी। मैंने जो किया वह users और clients के बीच कई रिश्तों को स्थापित किया गया था और tasks नामक रिश्तों को संभालने के लिए एक पिवट तालिका बनाई गई है जो प्रत्येक कार्य के लिए विवरण भी संग्रहीत करता है।

यह यहाँ टाइप करने के लिए बहुत ज्यादा था, लेकिन आप http://paste.laravel.com/Fpv

+0

बिल्कुल प्रतिभा। धन्यवाद, यह वही है जो मैं ढूंढ रहा था। हालांकि (और मैं मानता हूं कि यह मेरे प्रश्न के दायरे से बाहर है) - जब आप पेजिनेशन और/या ऑर्डर को जोड़ते हैं तो यह वास्तव में जटिल/ब्रेक हो जाता है (उदाहरण के लिए create_at डीईएससी द्वारा ऑर्डर करें) कथन आपके कंट्रोलर में अपनी वाक्प्रचार क्वेरी में :) स्पष्ट रूप से orderBy बनाया_at यह उपयोगकर्ता की बनाई गई_ तिथि को प्राप्त करने का प्रयास कर रहा है, जो कार्य की बनाई गई_ तिथि नहीं है। – Josh

+0

मैंने कुछ चीजों की कोशिश की है, लेकिन जब मैं उत्सुक लोडिंग करता हूं तो यह हमेशा विफल रहता है जब मैं पेजिंग या ऑर्डर करने का प्रयास करता हूं। मुझे लगता है कि यह करने का सबसे अच्छा तरीका है पेजिंग के लिए array_slice का उपयोग करना होगा और जो भी सॉर्टिंग फ़ंक्शन आपके लिए उपयुक्त होगा। – user1669496

+6

यह कभी भी यहां टाइप करने के लिए बहुत अधिक नहीं है "। मैं आपके लिंक को हल नहीं कर सकता। – DutGRIFF

0

कई-से-अनेक रिश्तों सुवक्ता के साथ इस तरह किया जा सकता है:

class User extends Eloquent implements UserInterface, RemindableInterface { 
    public function client() 
    { 
     return $this->belongsToMany('Client', 'tasks', 'client_id')->withPivot('description'); 
    } 
} 

और व्युत्क्रम संबंध ...

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

इस परीक्षण नहीं किया है, लेकिन यह सही होना चाहिए।

+0

मैं ज्ञान की कमी और प्रश्नों की संख्या के लिए क्षमा चाहता हूं, लेकिन मेरे नियंत्रक में मेरी स्पष्ट क्वेरी कैसी दिखती है? – Josh

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