2013-01-23 32 views
6

मेरे पास नीचे दी गई 3 तालिका है।लार्वेल में रिश्ते और ब्लेड

Table 1(user): 
id username password Name Age 

Table 2(tasks): 
id task_name description 

Table 3(logs) 
id user_id task_id date hours 

टेबल रिश्ते:

user has_many logs 
task has_many logs 

logs belongs_to user 
logs belongs_to task 

मैं क्या हासिल करने की कोशिश कर रहा हूँ के साथ उपयोगकर्ता नाम, कार्य का नाम, तारीख और घंटे लॉग पाने के लिए है।

नियंत्रक:

return View::make('log.index') 
      ->with('logs',log::all()); 

ब्लेड टेम्पलेट

@foreach($logs as $log) 
      <tr> 
       <td>{{$log->id}}</td> 
       <td>{{$log->users()->name}}</td> 
       <td>{{$log->tasks()->name}}</td> 
      <tr> 
@endforeach 

लेकिन असमर्थ संबंधित मेज से उन का नाम और कार्य नाम लाने के लिए। किसी भी मदद की सराहना की है।

+0

'{{$ लॉग-> उपयोगकर्ता() -> नाम}} 'आप एकाधिक उपयोगकर्ताओं को एक ही नाम रखने की उम्मीद कैसे करते हैं? –

+0

@WaleedKhan मैं लार्वेल के लिए नया हूँ मैं बस कोशिश कर रहा था लेकिन काम नहीं किया। यह भी कोशिश की {{$ log-> उपयोगकर्ता (user_id) -> name}} –

उत्तर

10

एक बेहतर तरीका के रूप में here

तो दस्तावेज अपने लॉग मॉडल में, अपने मॉडल में उलटा hasMany संबंध परिभाषित करने के लिए है, शायद आप परिभाषित करने की जरूरत आप या तो उपयोग कर सकते हैं:

$log->user()->first()->name 

या इससे भी बेहतर, गतिशीलता का उपयोग करके आईसी गुण:

$log->user->name 
+0

धन्यवाद यह समस्या को हल करने में मेरी सहायता करता है – rahman

+0

'$ log-> उपयोगकर्ता() -> पहले() -> name' इससे एन + 1 समस्या – Naresh

4

$ लॉग-> उपयोगकर्ता() और $ लॉग-> कार्य() एक क्वेरी ऑब्जेक्ट देता है। नीचे, प्रत्येक कॉल परिणाम देता है जो $ log-> उपयोगकर्ताओं() -> get() और $ log-> कार्यों() -> get() को कॉल करने जैसा ही है। चूंकि रिश्ते कई लोगों के लिए हैं, इसलिए आपको प्रत्येक रिकॉर्ड को पुनः प्राप्त करने के लिए $ log-> उपयोगकर्ताओं और $ log-> कार्यों को फिर से शुरू करने की आवश्यकता होगी।

@foreach($logs as $log) 
     <tr> 
      <td>{{$log->id}}</td> 
      <td> 
       @foreach($log->users as $user) 
       {{$user->name}}, 
       @endforeach 
      </td> 
      <td> 
       @foreach($log->tasks as $task) 
       {{$task->name}}, 
       @endforeach 
      </td> 
     <tr> 
@endforeach 

यदि आप एक लॉग से जुड़े एक विशिष्ट उपयोगकर्ता/कार्य को चाहते हैं तो आपको एक प्रश्न बनाना होगा।

class Log extends Eloquent { 
    protected $table = "logs"; 

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

फिर अपने ध्यान में रखते हुए:

@foreach($logs as $log) 
     <tr> 
      <td>{{$log->id}}</td> 
      <td>{{$log->users()->where('id', '=', $userID)->first()->name}} </td> 
      <td>{{$log->tasks()->where('id', '=', $taskID)->first()->name}} </td> 
     <tr> 
@endforeach 

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

  • कोई संबंधित समस्या नहीं^_^