2014-02-17 12 views
6

Ich habe eine Benutzer Tabelle und eine Termine Tabelle. In der Termintabelle habe ich zwei Benutzer-IDs (customer_id, staff_id). Ich möchte alle Termine mit dem Kundennamen und dem Namen des Mitarbeiters abrufen.Laravel Eloquent Eager Loading: Beitreten gleiche Tabelle zweimal

Wie Sie sehen können, muss ich die Benutzer Tabelle zweimal mit der Tabelle Termine verbinden. Normalerweise mache ich das mit inneren Verbindungen.

Können wir dasselbe mit Laravel eloquent eager loading mit() tun?

Können wir so etwas wie:

appointments::with('users' *)->get();? 
* Do something here to inner join users table twice, and read user1.name as staff_name, user2.name as customer_name. 

Dies ist die letzte Ausgabe ich brauche:

appointment_id 
staff_id 
staff_name 
customer_id 
customer_name 
datetime 

ich eine andere Frage haben, was in der folgenden Abfrage der zweite Parameter ist?

User::with(array(
    'post'=> function() use $region { 
      //what is use $region means? Can you give me an example? 
    } 
)); 

Vielen Dank!

Antwort

10
class T1 extends Eloquent { 

    protected $table = 't1'; 


} 

class T2 extends Eloquent { 

    protected $table = 't2'; 

    public function customer() 
    { 
     return $this->belongsTo('T1','c_id');//c_id - customer id 
    } 
    public function staff() 
    { 
     return $this->belongsTo('T1','s_id');//s_id - staff id 
    } 
} 

1) Mit der Verwendung "mit":

$list = \T2::with('customer')->with('staff')->get(); 
    foreach ($list as $row) { 
     echo 'ID: '.$row->id.', customer: '.$row->customer->name.', staff: '.$row->staff->name.'<br>'; 
    } 

2) Mit verbindet:

$list = \T2::leftJoin('t1 as customer_table', 'customer_table.id','=','t2.c_id') 
     ->leftJoin('t1 as staff_table', 'staff_table.id','=','t2.s_id') 
     ->select('staff_table.name as staff_name','customer_table.name as customer_name') 
     ->get(); 
foreach ($list as $row) { 
    echo 'customer: '.$row->customer_name.', staff: '.$row->staff_name.'<br>'; 
} 

über zweite Frage - Das für Subqueries ist. Siehe Dokumentation: http://laravel.com/docs/eloquent#eager-loading

Verwandte Themen