2016-03-22 16 views
0

Ich brauche zeigen Daten mit Beziehung mit DISTINCT.laravel Eloquente Beziehung mit Distinct

Dies ist meine SQL-Daten:

Tisch pochettes

id | 
49 | 

Tisch journees

id | formateurs_id | pochettes_id 
1 | 3    | 49 
2 | 4    | 49 
3 | 3    | 49 

Tisch formateurs

id | 
3 | 
4 | 

Modell Pochette

public function Journees() 
{ 
    return $this->hasMany('App\Journee','pochettes_id'); 
} 

Modell Journee

public function Formateurs() 
{ 
    return $this->belongsTo('App\Formateur', 'formateurs_id'); 
} 

ich diesen Code verwendet bin Daten mit unterschiedlichen formateurs zu zeigen, weil ein Formateur viele Journee haben in die gleiche Pochette:

$pochette = Pochette::find(49); 
foreach ($pochette->Journees->distinct('formateurs_id') as $formateur) { 
      echo $formateur->formateurs_id; 
      echo "<br>"; 
     } 

Aber dieser Code dosn't Arbeit habe ich diese Fehlermeldung

**BadMethodCallException in Macroable.php line 81: 
Method distinct does not exist.** 

ich dieses Ergebnis würde zeigen:

3 
4 

nicht:

3 
4 
3 

Antwort

5

Wenn Sie Greifen Sie auf eine redegewandte Beziehung wie eine Immobilie zu, erhalten Sie eine Eloquent Collection. distinct() ist jedoch eine Query Builder-Methode, und Sie benötigen Zugriff auf die Query Builder-Instanz, bevor Sie die Sammlung zurückgeben. Wenn Sie am Ende der Beziehung () hinzufügen, erhalten Sie Zugriff auf die Query Builder-Instanz und können diese Query Builder-Methoden verketten. In Ihrem Fall suchen Sie eigentlich nach der groupBy() Methode und nicht nach distinct(). Vergessen Sie nicht, die Abfrage mit get() zu beenden.

foreach ($pochette->Journees()->groupBy('formateurs_id')->get() as $formateur) { 
    echo $formateur->id ; 
    echo "<br>"; 
} 
+0

Aber ich will zeigen die zwei ID: 3 und 4 –

+1

@Ayedmedamine Dann suchen Sie 'groupBy()' und nicht 'distinct()'. Ich habe die Antwort aktualisiert. –

+0

Add(), um auf Abfrage-Generator zuzugreifen, war etwas, das ich nie wusste. Denken Sie nicht, dass es sogar dort in den Dokumenten ist? – ibex