2016-08-08 23 views
0

Ich habe 2 Modelle, ein Benutzermodell und ein Post-Modell. Ich versuche, eine Sammlung von Nutzern zu erhalten, die zwischen einem bestimmten Zeitraum gebucht haben. Ich bin einfach verloren, wie man die 2 Modelle zusammen bindet. Es gibt eine Eins-zu-Viele-Beziehung zwischen den beiden.Laravel Get Collection für eine Sammlung

Benutzermodell:

public function posts() 
{ 
    return $this->hasMany('App\Models\Post', 'user_id'); 
} 

Also, ich möchte eine Sammlung von Benutzern, wo Beiträge sind zwischen Datum 1 & Datum 2 und wenn ein Benutzer Beiträge zwischen diesen Daten hat, habe ich eine Sammlung dieser Stellen möchten. Ich weiß, dass ich WhereBetween für einen Abfrage-Generator verwenden kann, aber kann ich das für eloquent verwenden? Wie sortiere ich das gesamte Benutzermodell nach denen, die diese Posts haben? Wie wäre es mit der Methode filter()?

$users = Users::all(); 

$users = $users->filter(function() { 
    foreach ($users as $user) 
    { 
     if ($user->posts->whereBetween(date 1, date 2)) 
     { 
     return true; //something like that 
     } 
    } 
}); 

Antwort

3

Es ist besser, Ihr Beziehungsmodell wie gewünscht zu laden und dann mit dem Ergebnis zu arbeiten. Keine Notwendigkeit, die if-Prüfungen zu verwenden.

$users = Users::with(['posts' => function($query) { 

    $query->whereBetween(date 1, date 2); 

}])->get(); 

Weitere Informationen: Eager Loading

+0

Oder Sie verwenden 'whereHas' :) – Maraboc