2016-07-09 7 views
4

Zum Beispiel hier die Tabellenstruktur.Laravel: Wie bekomme ich ausgewählte Spalten von Base Table mit Eager Loading?

User 
----- 
-id 
-role_id 
-fname 
-lname 
-country_code 
-mobile 
-password 
-remember_token 
-email 
-address 
-location_id 

und eine andere Tabelle

Role 
----- 
-id 
-name 

Nun, wenn ich alle Benutzerinformationen aus Benutzertabelle wollen mit Rollen Tabelle wie folgt ich schreiben.

$ user = Benutzer :: mit ('Rolle') -> wo ('users.id', $ id) -> first() -> toArray();

Aber es wird alle Daten aus der Benutzertabelle abrufen. Was ich brauche, sind ausgewählte Spalten der Benutzertabelle mit eifrigem Laden. Nur für fname, lname, mobile, E-Mail aus der Benutzertabelle und role_name aus der Rollentabelle.

Ich weiß, wie bestimmte Spalten der zugehörigen Tabelle wie folgt auswählen.

public function Role(){ 
    return $this->belongsTo('App\Role')->select('id','name as role_name'); 
} 

Aber wie bestimmte Spalten der Benutzertabelle mit() zu wählen?

Antwort

0

versuchen, etwas wie folgt aus (ich schreibe es durch den Kopf, testen):

$user = User::with('Role') 
      ->where('users.id',$id) 
      ->select('users.fname','users.lname','users.mobile','users.email', 'roles.name as role_name') 
      ->first()->toArray(); 

oder verwenden joints direkt.

+0

Es kann roles.name nicht finden. SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'roles.name' in 'Feldliste' (SQL: wähle 'Benutzer'.' Name', 'Benutzer'.Name},' Benutzer'.mobile' , 'user'.email',' roles' .name' als 'role_name' von' users', wo 'users'.id' = 4 und' users'.deleted_at' ist Null-Limit 1) –

+0

könnten Sie show generated query von $ user = User :: mit ('Role') -> where ('users.id', $ id) -> first() -> toArray(); (Zu diesem Zweck verwenden Sie vor Abfrageaufrufanweisung DB :: enableQueryLog();, und zeigen Sie es nach dd (DB :: getQueryLog());). Darf Laravel tun 'mit' mit zwei SQL-Abfragen ... (?) –

+0

Es nicht verwendet gehört zu Beziehung im Modell definiert. Hier ist das Abfrageprotokoll. "wählen Sie' user'.name', 'user''lname',' user'.mobile', 'user''email',' roles'.name' als 'role_name' von' users 'where' user'.id' =? und 'users'.deleted_at' ist null" –

0

Bitte versuchen Sie dies;

User::with(['Role' => function ($query) { 
    $query->select('name'); 
}])->select('fname', 'lname', 'mobile', 'email', 'role_id')->whereId($id)->first()->toArray(); 
+0

Es werden keine Fetch-Role-Daten angezeigt. "fname" => "John" "lname" => "Doe" "mobile" => "1234567890" "email" => "[email protected]" "Rolle" => null –

+0

Ja! Sie müssen die Rolle_ID in der Benutzerauswahl hinzufügen. –

+0

Danke trotzdem. :) –

Verwandte Themen