2016-02-15 22 views
5

Ich versuche, eine Liste von Genres abzurufen, denen eine Spur zugewiesen wurde. Ich verwende eine whereHas eloquente Abfrage, fühle mich aber etwas verloren.Eloquent Laravel - Ergebnisse nur abrufen, wenn die Beziehung existiert

Ich habe folgende

//model 
public function workingGenre() { 
    $this->whereHas('tracks', function($query) { 
     $query->where(''); 
    }); 

    return $this->tracks()->first(); 
} 

//controller (where i am passing variables etc) 
$genres = Genre::with('tracks')->get(); 

//my view 
@foreach($genres as $genre) 
    {{print_r($genre->workingGenre())}} 
@endforeach 

mir bewusst bin, dass mein Wo leer ist, mein derzeitiger print_r gibt die folgenden:

         1 
             App\Track Object 
(
[table:protected] => Track 
[fillable:protected] => Array 
    (
     [0] => id 
     [1] => GenreId 
     [2] => Title 
     [3] => CreatedById 
     [4] => SelectedCount 
     [5] => ProducerName 
     [6] => SourceId 
     [7] => Published 
    ) 

[connection:protected] => 
[primaryKey:protected] => id 
[perPage:protected] => 15 
[incrementing] => 1 
[timestamps] => 1 
[attributes:protected] => Array 
    (
     [id] => 6 
     [GenreId] => 4 
     [Title] => Guns Up 
     [CreatedById] => 1 
     [SelectedCount] => 0 
     [ProducerName] => 
     [SourceId] => 1 
     [Published] => 1 
    ) 

[original:protected] => Array 
    (
     [id] => 6 
     [GenreId] => 4 
     [Title] => Guns Up 
     [CreatedById] => 1 
     [SelectedCount] => 0 
     [ProducerName] => 
     [SourceId] => 1 
     [Published] => 1 
    ) 

[relations:protected] => Array 
    (
    ) 

[hidden:protected] => Array 
    (
    ) 

[visible:protected] => Array 
    (
    ) 

[appends:protected] => Array 
    (
    ) 

[guarded:protected] => Array 
    (
     [0] => * 
    ) 

[dates:protected] => Array 
    (
    ) 

[dateFormat:protected] => 
[casts:protected] => Array 
    (
    ) 

[touches:protected] => Array 
    (
    ) 

[observables:protected] => Array 
    (
    ) 

[with:protected] => Array 
    (
    ) 

[morphClass:protected] => 
[exists] => 1 
[wasRecentlyCreated] => 
) 

**And so on** 

Einen Schub in der richtigen Richtung wäre toll, ich Ich finde dieses ganze eloquente Zeug wirklich nützlich, aber es ist schwer, meinen Kopf herumzulegen.

Dank

Antwort

6
$genres = Genre::with('tracks')->has('tracks')->get(); 
    foreach($genres as $genre) 
     //do what you need 
    endforeach 

diese Weise können Sie Genre erhalten nur, wenn sie Tracks haben und Eager laden sie, wenn Sie nicht wollen eager loading ::with('tracks')

+0

entferne ich denke, dass ich meine Frage schlecht formuliert, gewann ich‘ Ich habe null Felder, ich möchte nur Genres anzeigen, die eine Spur haben, die mit ihnen verwandt ist, meine schlechte. – ExohJosh

+0

Ok, hast du deine Tracks-Tabelle 'genre_id'? – Froxz

+0

Ja, mit der Modellbeziehung so eingerichtet öffentliche Funktion Genre() { Rückgabe $ This-> AngleTo (\ App \ Genre :: Klasse, 'GenreId', 'ID'); } – ExohJosh

Verwandte Themen