2013-01-23 47 views
6

Tôi có 3 bảng như được đề cập bên dưới.mối quan hệ và lưỡi dao trong laravel

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 

Bảng Mối quan hệ:

user has_many logs 
task has_many logs 

logs belongs_to user 
logs belongs_to task 

những gì tôi đang cố gắng để đạt được là để có được các bản ghi với tên người dùng, nhiệm vụ Tên, ngày và giờ.

Bộ điều khiển:

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

Blade mẫu

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

nhưng không thể tìm nạp người dùng Tên và Nhiệm vụ tên từ bảng tương ứng. bất kỳ trợ giúp nào được đánh giá cao.

+0

'Bạn muốn nhiều người dùng có một tên như thế nào? –

+0

@WaleedKhan Tôi mới làm quen với laravel tôi chỉ đang cố gắng mà không làm việc. đã thử điều này quá {{$ log-> người dùng (user_id) -> name}} –

Trả lời

10

Cách tốt hơn là xác định mối quan hệ hasMany nghịch đảo trong Model của bạn, như tài liệu here

Vì vậy, trong mô hình các bản ghi của bạn, có lẽ bạn cần phải xác định:

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

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

Sau đó, theo quan điểm của bạn bạn có thể sử dụng:

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

hoặc thậm chí tốt hơn, bằng cách sử dụng Dynam ic Thuộc tính:

$log->user->name 
+0

Cảm ơn bạn đã giúp tôi giải quyết vấn đề – rahman

+0

'$ log-> user() -> đầu tiên() -> name' điều này sẽ dẫn đến N + 1 vấn đề. – Naresh

4

$ log-> users() và $ log-> tasks() trả về đối tượng truy vấn. Dưới đây, mỗi cuộc gọi trả về kết quả giống như việc gọi $ log-> users() -> get() và $ log-> tasks() -> get(). Bởi vì các mối quan hệ rất nhiều, bạn sẽ cần phải lặp qua $ log-> users và $ log-> tasks để lấy từng bản ghi.

@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 

Nếu bạn muốn người dùng/công việc cụ thể gắn liền với nhật ký, bạn sẽ phải tạo truy vấn.

@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 
Các vấn đề liên quan