2016-04-27 2 views
0

Ich habe riesige Benutzer-Update-Formular. Manchmal enthält update sehr viele Felder, manchmal nur ein oder zwei. Dies ist mein Code:Laravel 5.2 Set-Modell-Attribute basierend auf Feldern in Eingabe

public function updateUser(Request $request){ 
    $user = User::where('id',$request->id)->firstOrFail(); 

    if($request->first_name){ 
     $user->first_name= $request->first_name; 
    } 

    if($request->last_name){ 
     $user->last_name = $request->last_name; 
    } 

    if($request->job_name){ 
     $user->job_name= $request->job_name; 
    } 

    //etc.. 20 more fields 

    $user->save(); 

Es ist möglich, setzen Modell auf den Feldern in $request abhängigen Attribute? Manchmal $request enthält 1 Feld, manchmal 20. Bitte beachten Sie, ich möchte Datenbank nur einmal berühren, mit save() -Methode am Ende.

+0

Sie meinen, setzen Sie Attribute automatisch basierend auf Ihrer Anfrage? – Abbasi

Antwort

2
$user->update($request->all()); 

Sicherstellen, dass alle notwendigen Variablen in Ihrem $fillable Array spezifiziert sind für User Modell

Wenn Sie Modell aktualisieren möchten Attribute ohne Verwendung Speichern fill Methode

+0

Danke für die Antwort. Die Funktion update() bewirkt jedoch das Aktualisieren der Datenbank. Ich möchte nur alle Parameter von Anfrage zu Modell zuweisen, bevor Datenbank berührt wird. Das Berühren der Datenbank sollte am Ende des Skripts mit der Methode save() erfolgen. – Fusion

+1

Die Methode, nach der Sie suchen, ist 'fill' https://laravel.com/api/5.2/Illuminate/Database/Eloquent/Model.html#method_fill –

+0

Erstaunlich! Genau das habe ich gesucht. Können Sie bitte die Antwort aktualisieren, damit ich sie akzeptieren kann? – Fusion

0

Wenn $request Feldnamen und Model Feldnamen identisch sind (wie es in Ihrem aktuellen Code scheint) versuchen Sie dies:

$input = $request->all(); $user = User::firstOrFail('id',$input->id); $updateNow = $user->update($input);

Eine weitere Option ist:

DB::table('users') ->where('id', $request->id) ->update($request); //or can use Input::all()

a Haben schau es dir auch für weitere Erklärungen an: Query Builder

+0

Danke für die Antwort. Die Funktion update() bewirkt jedoch das Aktualisieren der Datenbank. Ich möchte nur alle Parameter von Anfrage zu Modell zuweisen, bevor Datenbank berührt wird. Das Berühren der Datenbank sollte am Ende des Skripts mit der Methode save() erfolgen. – Fusion

+0

Welche anderen Sachen machst du vor 'save()'? – Abbasi

0

für Benutzer Modell

/** 
* The attributes that are mass assignable. 
* 
* @var array 
*/ 
protected $fillable = [ 
    'name', 'email', 'password', 'facebook_id', 'job_name', '20 more fields...' 
]; 

für Controller

public function store(Request $request){ 
    $allRequest = $request->all(); 
    // It is not in table 
    unset($allRequest['_token']); 
    User::create($allRequest); 
}