2017-04-18 7 views
0

Ich habe diese Route: Route :: Ressource ('Mein-Konto', 'ProfileController');Laravel 5.4 Update-Methode nicht aktualisiert

Ich habe diese Methode in meinem Controller:

public function update(Request $request, User $user) 
{ 
     DB::enableQuerylog(); 

     $user->update([ 
      'first_name' => $request->first_name, 
      'last_name' => $request->last_name, 
      'phone' => $request->phone 
     ]); 

     dd(\DB::getQuerylog()); 
} 

Ich habe diese Form:

<form class="form" role="form" method="POST" action="{{ url('/my-account/'. $user->id) }}"> 

    {{ method_field('PATCH') }} 

    {{ csrf_field() }} 

    <div class="form-group" id="firstNameDiv"> 

     <label class="control-label">First Name</label> 

     <input type="text" class="form-control" name="first_name" value="{{ $user->first_name }}"> 

     <span class="help-block" id="firstNameError"></span> 

    </div> 

Wenn ich die Form der Vorname einreichen wird in der Tabelle nicht aktualisiert werden.

Wenn ich dd ($ Anfrage-> Vorname) versuche, sehe ich den Namen, den ich eingegeben habe.

Das DB-Protokoll gibt ein leeres Array wie folgt zurück: [], warum wird es nicht aktualisiert?

+0

, was Sie, wenn Sie 'dd ($ user) Sie bekam'? Vielleicht ist die '$ user'-Instanz nicht das, was Sie denken, dass es ist? – ariestikto

Antwort

-1

Versuchen Sie dd als erste Sache in Ihrer Methode ausgeführt werden, um sicherzustellen, dass es ausgelöst wird. Zumindest tue ich das jedes Mal, wenn etwas nichts zu tun scheint.

Als nächstes, warum machst du update ohne where? Wenn Sie nicht alle Datensätze aktualisieren möchten, sollten Sie where() in Ihrer Abfrage haben.

Übrigens, da bin ich mir nicht sicher ... sollten Sie nicht stattdessen Ihr Modell in den Konstruktor einspeisen?

Entweder versuchen so etwas wie dieses

$user = User::find($id) // or in your case $user->find($id); 
$user->firstname = $request->input('firstname'); 
$user->save(); 

Oder

$user->where('id', $id)->update(['firstname' => $request->input('firstname')]); 
+0

Danke, aber ich mache es genauso in einem anderen Modell/Controller und alles funktioniert gut dort. Der Benutzer wird an die Methode gesendet, die ich nicht ausführen muss. Ich setze zuerst dd ($ request) in die Methode, es zeigt mir die Anfrage mit allen Feldern und den richtigen Werten. –

+0

hast du 'DB :: table ('users')'? Wenn das funktioniert, muss entweder in Ihrem eloquenten Code oder dem beredten Kerncode etwas falsch sein. Versuchen Sie, den Abfrage-Generator zum Überprüfen zu verwenden. – jen

+0

Sorry, aber wo muss ich DB :: Tabelle ('Benutzer') und warum? Die Sache ist, das funktioniert gut mit anderen Controllern, die ich habe. Ich änderte alles, um eine $ ID an die Methode anstelle von $ user zu senden, und findOrFail etc. Ich muss nur verstehen, warum dieser Code nicht funktioniert, wenn es an anderen Orten funktioniert –

-1

wenn u Sie nicht created_at und updated_at in der Tabelle verwenden sollten deaktivieren sie mit: public $ Zeitstempel = false;