2017-09-11 2 views
0

Odd-Problem hier, ich habe eine Sicht content.home, die auf das User Modell des authentifizierten Benutzers basiert, um zu lösen und an es übergeben werden.Laravel 5 Async Datenbank Transaktion?

Bevor das Benutzermodell bereit ist, habe ich eine einfache Funktion, in der ich einen Namen an das User Modell des authentifizierten Benutzers übergebe.

Dieser Code ist unten, einschließlich der Ansicht Rückkehr:

public function name() 
    { 
    $input = Input::all(); 
    $name = $input['name']; 
    if(strlen($name)>2) //some validation 
    { 
    $user = User::where('id',Auth::id())->first(); 
    $user->name = $name; 
    $user->save(); 
    return view('content.home')->with('user', Auth::user());   
    } 
    } 

Mein Problem ist, wenn ich die Ansicht, die ich nicht zurück den name des Benutzers hat. Sobald ich die Seite aktualisiere, erscheint sie. Andere Benutzerdaten, die von Auth::user() bereitgestellt werden, sind dort, aber nicht der Name. Wie kann das sein, wenn ich es gerade gerettet habe? Es ist nicht NULL, wieder, wenn ich die Seite sofort aktualisiere, erscheint es.

ich die name in der Klinge Ansicht immer in etwa so:

{{$user->name}} 

Ist save() async? Ich denke nicht. Gibt es eine gewisse Latenz?

Wie kann ich sicherstellen, dass das übergebene Modell korrekt aufgelöst wird?

Vielen Dank!

Antwort

0

dies jemand bei Beantwortung hat ein ähnliches Problem:

Der Grund dafür ist, ohne eine Aktualisierung fehlgeschlagen ist, dass es irgendeine Art von Cache auf Auth::user() ist.

Wenn ich die $user übergeben ich gespeichert, anstatt die Auth::user(), obwohl es der gleiche Benutzer ist, funktioniert es.

So return view('content.home')->with('user', Auth::user());

zu

return view('content.home')->with('user', $user);  
+0

Der Grund, warum Sie dieses Problem hatte ändern ist, weil Ihr Benutzerinstanz aus der Abfrage eine ganz andere Instanz als das, was Auth :: Benutzer() verweist. –

+0

@jjones Warum sagst du das? Verweisen sie (in diesem Fall) nicht auf denselben Benutzer? –

+1

Sie sind derselbe Benutzer, sind aber nicht dieselbe Instanz der Benutzerklasse. Wenn Sie den Name der Benutzerinstanz aktualisieren, die von der Abfrage zurückgegeben wird, wird die Instanz, auf die Auth :: user() verweist, nicht beeinflusst, da es eine andere Instanz der Benutzerklasse ist. –