2013-01-23 12 views
6

Ho 3 tavoli come indicato di seguito.rapporto e lama in 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 

relazioni tra tabelle:

user has_many logs 
task has_many logs 

logs belongs_to user 
logs belongs_to task 

quello che sto cercando di realizzare è quello di ottenere i registri con il nome utente, compito Nome, data e ora.

Controller:

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

modello lama

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

ma in grado di recuperare gli utenti Nome e Compiti nome dalla relativa tabella. ogni aiuto è apprezzato.

+0

'{{$ log-> utenti() -> nome}}' Come prevedete che più utenti abbiano un singolo nome? –

+0

@WaleedKhan sono nuovo di laravel lo stavo solo provando ma non funzionava. provato anche questo {{$ log-> utenti (user_id) -> nome}} –

risposta

10

Un modo migliore è quello di definire inversa relazione hasMany nel vostro modello, come documentato here

Quindi nel tuo modello di log, probabilmente è necessario definire:

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

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

Poi, nel tuo vista è possibile utilizzare:

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

o anche meglio, utilizzando Dynam ic Proprietà:

$log->user->name 
+0

Grazie a questo mi aiuta a risolvere il problema – rahman

+0

'$ log-> user() -> first() -> name' questo porterà a N + 1 problema – Naresh

4

$ log-> users() e $ log-> tasks() restituisce un oggetto query. Sotto, ogni chiamata restituisce il risultato che equivale a chiamare $ log-> users() -> get() e $ log-> tasks() -> get(). Poiché le relazioni sono molte e molte, dovrai eseguire iterazioni su $ log-> users e $ log-> tasks per recuperare ogni record.

@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 

Se si desidera un utente/attività specifico collegato a un registro, è necessario creare una query.

@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 
Problemi correlati