2017-03-15 8 views
1

Wie kann ich Daten abrufen, die dem Benutzer gehören?laravel Abrufen von Daten aus der Datenbank

Hinweis Modell:

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

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

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); 
    } 
} 

Controller:

public function show($id) 

{ 

    $notes = Note::with('pilot')->get(); 


    return view('dziennikpracy.show',compact('notes')); 

} 

Zu der Zeit ist es alle Noten zeigt, und ich will es nur angezeigt werden die Notizen gehören zu jedem Benutzer und ich weiß nicht wie.

+1

hinzufügen, wo Klasse – Thamilan

+0

vielleicht etwas wie das '$ pilotNotes = Pilot :: find ($ id) -> Notiz();' wo '$ id' ist die ID von Benutzer (Pilot), dessen Notizen Sie erhalten möchten – ArtOsi

Antwort

0

Ich mag nur Notizen angezeigt werden, die für jeden Benutzer gehört

Um Notizen von einem Piloten zu bekommen, dies zu tun:

$notes = Note::where('pilot_id', $pilotId)->get(); 

Um Notizen für alle Piloten zu bekommen, dies zu tun:

$pilots = Pilot::with('notes')->get(); 

und alle Piloten und ihre Notizen angezeigt werden verschachtelte verwendenIn

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

aber in meiner Notiz Tabelle ich habe keine Pilot_ID soll ich es hinzufügen? – tomczas

+0

@tomczas ja, du solltest es hinzufügen und 'ansesTo()' Beziehung hinzufügen. –

+0

@tomczas auch, dass, wenn Sie bereits Piloten-ID wissen und Sie nur eine Pilot-Notizen erhalten möchten, wird mein Code nur eine Abfrage an DB erstellen, während andere Lösungen zwei erstellen. –

1

whereHas Note::whereHas('pilot', function($q) use ($userId) { $q->where('user_id', $userId) })

0

Ihre Anfrage Sammlung von Daten zurückgeben kann, so dass Sie können Sie "groupBy()" Methode der Sammlung:in der Ansicht.

1

Es ist viel einfacher zu tun:

$notes = Pilot::find($id)->notes()->get(); 

$id ist der Pilot-ID, die nicht der Funktionsparameter sein kann oder nicht.

Ein anderer Weg ist:

$pilotWithNotes = Pilot::with("notes")->find($id); 
+0

SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'notes.pilot_id' in 'where-Klausel' (SQL: wähle * aus 'notes' aus, wobei' notes'.pilot_id' = 5 und 'notes'.pilot_id' sind ist nicht null) – tomczas

+0

Meine Tabellen sieht wie, Pilot-Tabelle: ID, Telefon, E-Mail. Anmerkungstabelle: ID, Datum, Bemerkung – tomczas

+0

@tomczas Es gibt keinen Fremdschlüssel in der Notizentabelle? – apokryfos

Verwandte Themen