2016-07-29 16 views
0

Beziehung: Receipt hasMany LineitemsLaravel 5.1 komplizierte Beziehung Query Builder

$columns = ['rece_id','rece_user_id','rece_name','rece_date'] 

$builder = Receipt::select($columns) 
     ->with('lineItems') 
     ->where('rece_user_id', Auth::user()->id) 

dd($builder->get()->toArray()); 

Above Code gibt mir die Quittungen mit ihren jeweiligen alle zugehörigen Positionen (alle Spalten).

Ich brauche nur die erste Spalte einer ersten Zeile, z. liit_beschreibung. (Ich brauche das als eine andere Spalte in $columns Liste).

Ist das sogar mit Eloquent möglich?

UPDATE

Ich löste es von der DB-Abfrage statt Eloquent Verwendung (Aber ich ziehe eine Eloquent Lösung, wenn jemand helfen kann)

 $builder = DB::table('receipts')->select($columns) 
     ->join('line_items', function ($join) { 
      $join->on('receipts.rece_id', '=', 'line_items.liit_rece_id'); 
     }) 
     ->where('rece_user_id', Auth::user()->id) 
     ; 

Wenn dies in Eloquent Abfrage umgewandelt werden kann, es würde Spaß machen.

+0

warum nicht zu verwenden - > first() statt get() – ClearBoth

+0

@ClearBoth Ich brauche alle Belege, aber nur mit ** first ** lineitem. – karmendra

Antwort

0
$builder = Receipt::with(['lineItems' => function ($query) { 
     $query->first('liit_description'); 
    }])->where('rece_user_id', '=', Auth::user()->id)->get($columns); 
+0

Ok, das gibt mir die gesamte erste Werbebuchung. Ich muss nur eine Spalte von line_item in dieser Abfrage auswählen. – karmendra

+0

Welche Spalte benötigen Sie? Siehe die aktualisierte Antwort. – ClearBoth

+0

'Wert()' Funktion gibt null Array zurück – karmendra

0

ich es gelöst, indem sie mit Eloquent Join Mit überraschenderweise funktionierte es (nichts über in Eloquent Doc join)

Added liit_description in Array-Spalten $, Und

$builder = Receipt::select($columns) 
    ->join('line_items', function ($join) { 
     $join->on('receipts.rece_id', '=', 'line_items.liit_rece_id'); 
    }) 
    ->where('rece_user_id', Auth::user()->id) 
; 
Verwandte Themen