2017-06-15 6 views
0

Ich baue eine kleine Anwendung, wo ich so viele zu viele Beziehung zwischen zwei Modellen etwas mit bin:neueste() Hilfsfunktion in Laravel

class Contact extends Model 
{ 
    public function company() 
    { 
     return $this 
      ->belongsToMany('App\Company', 'company_contact', 'company_id', 'contact_id')->withTimestamps(); 
    } 
} 

Jetzt, während das Abrufen möchte ich nur das neueste Modell durch die Pivot-Tabelle oder können Sie relationale Tabelle sagen, denn das versuche ich zu implementieren:

public function getData() 
{ 
    $allData = Contact::all(); 
    foreach($allData as $data) 
    { 
     $getCompany = $data->company()->latest()->first(); 
     $data->company = $getCompany; 
    } 
    return response()->json(['model' => $allData], 200); 
} 

Aber ich bin nicht in der Lage die aktuelle Tabelle abzurufen ist es den gleichen alten Wert oder den ersten Wert zeigt. Hilf mir, wie ich das erreichen kann.

+0

Verwenden Sie den Standard-Laravel-Zeitstempel 'created_at' in der Tabelle? –

+0

Möglicherweise müssen Sie nach Unternehmen gruppieren, da Unternehmen zu vielen Kunden gehören können. – btl

+0

@AlexeyMezenin es bereits da in meiner Datenbank auch ich habe bei der Definition der Beziehung erwähnt. –

Antwort

0

Sie können dies versuchen:

latest() ist eine Funktion in Illuminate\Database\Query\Builder Klasse definiert.

public function latest($column = 'created_at') 
{ 
    return $this->orderBy($column, 'desc'); 
} 

Also, es wird nur orderBy mit der Spalte, die Sie, um Spalte mit der Standard absteigend liefert created_at

ODER

public function getData() 
{ 
    $allData = Contact::all(); 
    foreach($allData as $data) 
    { 
     $getCompany = $data->company()->orderBy('created_at', 'desc')->first(); 
     $data->company = $getCompany; 
    } 
    return response()->json(['model' => $allData], 200); 
} 
0

sein Also im Grunde Idee, wenn Sie die relationale sind zu finden Daten von vielen zu vielen Beziehung wie $data->company() in dieser Frage und versuchen, dies mit den neuesten sortieren sie die Firma Tisch i mit created_at Sortierung desc sortieren wird n, um relationale neuesten Daten zu erhalten, müssen Sie durch Pivot-Tabellen sortieren heißt

$getCompany = $data->company()->withPivot('created_at')->orderBy('pivot_cr‌​eated_at', 'desc')->first(); 

Dies ist, wie ich die neueste relationale Tabelle erreicht.

Hinweis: Sie müssen Pivot-Tabelle in Ihrer Beziehung haben, in dieser Antwort created_at ist das Pivot-Feld, das ich verwende.

Verwandte Themen