2017-12-21 5 views
1

Ich habe drei Tabellen: 1) Aufträge 2) Benutzer 3) DienstleistungenEloquent mehrere schließt sich in Laravel

Orders-Tabelle enthält: - a) user_id b) service_id

Benutzertabellen enthält: - a) Vorname b) Nachname c) E-Mail

Service-Tabelle enthält: a) service_name

Was passiert, ist, dass ein Dienstanbieter auf der Website seine Dienste hinzufügt und diese Dienste in Diensttabelle gespeichert werden. Während die Benutzer diese Dienste buchen und nach der Buchung ihre Benutzer-ID und die gebuchte Service-ID werden in der Auftragstabelle gespeichert.

Was ich getan habe, ist der angemeldete Service-Provider kann nur diejenigen Benutzer Details sehen, die in Bestellungen Tabelle gebucht sind.

Hierzu i unten Code verwendet, mit beredten: -

$get_result = App\Order::whereIn('user_id',$user_id)->whereIn('service_id',$service_id)->get(); 

wo $ user_id die Benutzer-IDs enthält und service_id $ enthält die Service-IDs. Dies gibt das Ergebnis derjenigen Benutzer an, die für die Dienste des angemeldeten Anbieters registriert sind.

Nun, das Problem, mit dem ich konfrontiert bin, möchte ich die Benutzerdetails wie Vorname, Nachname, E-Mail aus Benutzer-Tabelle und Service-Name aus Service-Tabelle abrufen.

Wie sollte ich diese Tabellen eloquent verbinden?

Antwort

1

Nun, das Problem, dem ich gegenüberstehe, möchte ich die Benutzerdetails wie Vorname, Nachname, E-Mail von Benutzer Tabelle und Service-Name von Service-Tabelle abrufen.

Verwenden Sie eager loading. Fügen Sie diese Klausel zu Ihrer Suchanfrage:

->with(['service', 'user']) 

Dies wird geladen Service und User Modelle für jeden Order.

Stellen Sie sicher, haben Sie Beziehungen im Order Modell definiert:

public function user() 
{ 
    return $this->belongsTo(User::class); 
} 

public function service() 
{ 
    return $this->belongsTo(Service::class); 
} 
+0

Vielen Dank!Ich habe getan wie: - Klasse Auftrag erweitert Modell { öffentliche Funktion Benutzer() \t { \t Rückgabe $ This-> AngleTo (Benutzer :: Klasse); \t} \t public function service() \t { \t return $ this-> belongsTo (Service :: Klasse); \t} } –

+0

Die danach in Blade-Datei aufgerufen: - $ get_details = App \ Order :: mit (['Service', 'Benutzer']) -> get(); Ich habe die Ergebnisse erhalten. –

+0

Aber jetzt lege ich foreach loop an. Wie werde ich es dort drüben zeigen. Ich verwende \t \t {{$ Details-> first_name}} \t \t {{$ Details-> E-Mail}} \t \t {{$ Details-> title}} \t \t in foreach loop –

1

aus Ihrer vorhandenen Abfrage, einen linken Join Sie es

$get_result = App\Order::whereIn('user_id',$user_id) 
->whereIn('service_id',$service_id) 
->leftJoin('users', 'orders.user_id', 'users.id') 
->leftJoin('services', 'orders.service_id', 'services.id')->get(); 

und wenn Sie möchten, erweitern können Wählen Sie bestimmte Spalten, können Sie hinzufügen

->select('orders.*', 'users.firstname', 'users.lastname', 'users.email', 'services.name') 

Wenn Sie diesen Router nicht gehen wollen Mit der Abfrage können Sie auch das Eager-Laden verwenden, wodurch die Service- und Benutzermodelle zu Ihrer Bestellanforderung wie hier erläutert hinzugefügt werden. https://laravel.com/docs/5.5/eloquent-relationships#eager-loading