2017-09-15 20 views
0

Ich habe eine Datenbank, die mit einer Nachrichten- und einer Nachrichtenkategorien-Tabelle dargelegt wird.Laravel | Eloquent Ausländische Daten bevölkern

Ich habe Nachrichten, die eine Kategorie 1 hat, die auf einen Fremdschlüssel der Kategorien Tabelle verweist, wo der Kategoriewert gleich der ID in den Kategorien Tabelle ist.

Ich versuche, einen Controller zu machen, der den Kategorienamen anstelle der Kategorie ID erhält, wenn die Ergebnisse als JSON-Antwort zurückgegeben werden.

Bisher habe ich diese innerhalb eines Modells:

public function category() 
{ 
    return $this->belongsTo(NewsCategories::class); 
} 

Und dann mache ich diese innerhalb eines Controllers:

public function index() 
{ 
    $news = new News(); 
    $news = $news->category()->get(); 

    return response()->json(['data' => $news], 200); 
} 

Aber die JSON-Antwort, die zurückgegeben wird ist leer. Ich habe einige Dinge gegooglet, aber habe wirklich nichts nützliches gefunden, das ausländische Feld zu erhalten, das Titel innerhalb der Kategorien-Tabelle ist.

Dies ist die Antwort, dass ich

{ 
    data: [ ] 
} 

Antwort

1

Die erste Ausgabe erhalten ist, dass Sie unter dem Eindruck sind, die Ihre neue News Instanz hat Kategorien verbunden:

$news = new News(); 

Diese Ausbeute wird nur eine leere Modellinstanz; es hat noch keine Datenbankdarstellung. Versuchen Sie, Kategorien über eine aufgefüllte Modellinstanz abzurufen:

und wiederholen Sie die JSON-Antwort.

Das zweite Problem ist, dass Sie $news->category()->get()querying the relation anrufen. Wenn Sie nur auf den Titel zugreifen müssen, versuchen Sie $news->category->title, der den zugehörigen Kategorie-Datensatz lädt und auf das Feld title für Sie zugreifen.


In Bezug auf Ihren Kommentar lesen Sie auf eager/lazy loading.

+0

Damit gibt es die Kategorie ID anstelle des eigentlichen Titels – tallent123

+0

Wie bereits im anderen Kommentar erwähnt, $ News = News :: mit ('Kategorie') -> mit ('Benutzer') -> bekommen(); 'scheint zu funktionieren, gibt es eine andere Möglichkeit, dies zu schreiben? – tallent123

+0

Das liegt daran, dass Sie das Beziehungsmodell [$ news -> category() -> get() 'stattdessen [abfragen] (https://laravel.com/docs/5.5/eloquent-relationships#querying-relations) des Zugriffs auf den Titel mit '$ news -> category -> title'. – sepehr