2017-11-21 2 views
1

ich ein full_name Feld wie folgt zu User Modell hinzugefügt auswählen möchten: bestimmte Spalten auswählen und zurück zusammen mit full_name FeldWie angehängtem Feld zurückzukehren, wenn bestimmte Spalte in Laravel

protected $appends = ['full_name']; 

public function getFullNameAttribute() 
{ 
    return $this->name . ' ' . $this->family; 
} 

Auf der anderen Seite möchte ich wie folgt aus:

return User::all('user_id', 'username', 'full_name') 

Aber Laravel bekommt diesen Fehler:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'full_name' in 'field list' (SQL: select user_id , username , name , family , full_name from users where users . deleted_at is null)

Wie kann ich machen was ich will?

Antwort

2

Ich denke, dass Sie dies nicht in Ihrer Select-Spalte angeben müssen ... es ist bereits mit Ihrer Ergebnismenge verbunden.

Wenn Sie bestimmte Spalten möchten, dann müssen Sie wahrscheinlich $ versteckte Attribute verwenden und sie sichtbar machen, wann immer Sie wollen.

1

Sie können das Attribut append in Abfrage nicht verwenden.

die full_name kann nur Zugang nach Abfrage sein .. bcoz full_name mit dem Ergebnis nicht anhängen wird

$users = User::all(); 
return $users[0]->full_name; //this requred getFullNameAttribute like above 

Wenn Sie noch mit Abfrage tun wollen. Tun Sie stattdessen in DB-Abfrage .. Dies muss nicht $ append-Attribut. full_name bereits mit dem Ergebnis, befestigen

return User::select('user_id', 'username' , DB::raw('CONCAT(name, " ", family) AS full_name'))->get(); 
1

Hallo Sie können zwei bekommen oder mehrere Spaltenwert concated Abfrage wie folgt verwendet,

return $user = User::select('user_id', 'username',DB::raw("CONCAT('first_name', " ",'last_name') AS full_name" 'full_name'); 

Oder wenn Sie von abgerufenen Array-Spalte verketten Sie so tun können, ,

$user = User::all(); 
foreach($user as $single){ 
    $user->full_name = $single->first_name ." ".$single->last_name 
} 
print_r($user); 

glückliche Kodierung.

Verwandte Themen