2017-03-16 4 views
0

Willkommen! Ich habe App gemacht, wo Benutzer eigene Notizen hat (basierend auf Fremdschlüssel). Jetzt in der Tabelle möchte ich seinen Namen angezeigt werden, aber ich kann es nicht passieren:laravel display variable von der zweiten tabelle

Pilot Modell:

class Pilot extends Model 
{ 
    protected $table = 'pilots'; 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'phone', 'email', 
    ]; 

    public function note() { 
     return $this->hasMany(Note::class); 
    } 

Hinweis Modell:

Klasse Hinweis Modell

{ 
    protected $table = 'notes'; 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'data', 'zadanie', 'uwagi', 'pilot_id', 
    ]; 

    public function pilot() { 
     return $this->belongsTo(Pilot::class); 
    } 

Hinweise erweitert Controller (ich möchte Pilotenname auf der Indexseite anzeigen)

public function index(Request $request) 

{ 
    $notes = Note::all(); 

    $pilots = Pilot::find($id); 
    return view('uwagi.index',['notes'=>$notes,'pilots'=>$pilots]); 
} 

Wenn ich übergeben Sie es über

{{$pilots->name}} 

ich einen Fehler nicht definiert $ id haben anzuzeigen. Jede Notiz gehört dem Benutzer basierend auf dem Fremdschlüssel pilot_id, der sich in der Hinweistabelle befindet. Dieser Schlüssel pilot_id bezieht sich auf Tabellenpiloten -> id und ich möchte den Index-Seitennamen dieser ID anzeigen, aber ich weiß nicht, wie ich ihn weitergeben soll.

Grüße und vielen Dank für die Hilfe

+0

Was genau wollen Sie zeigen? nur ein Pilot mit den dazugehörigen Notizen? – Onix

+0

Überprüfen Sie meine Antwort http://stackoverflow.com/a/42829707/4049692 – Muthu17

Antwort

0

Es gibt keine definierte Variable $ id in Ihrer Index-Methode des Controllers. Auch wenn Sie Modellbeziehungen definiert sind, können Sie benötigte Daten greifen mit Pilot::with('note')->all(); Werfen Sie einen Blick auf diese: https://laravel.com/docs/5.4/eloquent-relationships#eager-loading

Aber der beste Weg, pilot_id zu routen wie

Route::get('pilot/{id}', '[email protected]') 

und Index-Methode übergeben wird wie public function index(Request $request, $pilot_id)

oder

Route::resource('pilot', 'NotesController') 

und innen c ontroller definieren anzeigen ($ pilot_id) Methode als verwenden

$pilot_data = Pilot::with('note')->find($pilot_id); 

$pilot_data->note werden alle Noten verbunden enthalten

Piloten

Und gemäß dem Code, gibt es keinen Zweifel, für die Bindung anfordern $ Anfrage innerhalb Controllers Aktion, wie Sie es nicht innerhalb der

Code verwenden
+0

Fehlendes Argument 2 für App \ Http \ Controller \ NotesController :: index() – tomczas

+0

Entfernen Sie Request-Parameter von der Indexmethode, lassen Sie nur $ pilot_id – Nickstery

-1

Ok Antwort ist am einfachsten, wie ich dachte:

Controller:

public function index(Request $request) 

{ 
    $notes = Note::all(); 

    return view('uwagi.index',['notes'=>$notes,]); 
} 

Blade:

@foreach ($notes as $note) 
{{ $note->pilot->name }} 
@endforeach 
+0

Außer es doesn Passen Sie die Frage überhaupt nicht an (ganz zu schweigen davon, dass es sich um Ihre eigene Frage handelt), denn der eingefügte Code legt nahe, dass Sie nur Notizen von einem bestimmten Piloten wünschen, nicht alle. –

Verwandte Themen