Wie "Aktualisieren" Sie das Benutzerobjekt in Laravel?

8

In Laravel können Sie das tun:

%Vor%

Problem ist, wenn ich Änderungen an Objekten an diesem Objekt vornehme, gibt es mir, was vor meinen Änderungen dort war. Wie aktualisiere ich das Objekt, um die neuesten Werte zu erhalten? I.e. Um es zu zwingen, die spätesten Werte von der DB zu erhalten?

    
coderama 13.02.2014, 10:34
quelle

5 Antworten

1

Laravel macht das schon für dich. Immer wenn du Auth::user() machst, macht Laravel

%Vor%

Nullt den aktuellen Benutzer und wenn er protokolliert wird, rufen Sie ihn erneut unter Verwendung der in der Sitzung gespeicherten protokollierten ID ab.

Wenn es nicht so funktioniert, wie es sollte, haben Sie etwas anderes in Ihrem Code, das wir hier nicht sehen, und diesen Benutzer für Sie zwischenspeichern.

    
Antonio Carlos Ribeiro 13.02.2014, 11:29
quelle
8

Sie können das Cache-Objekt wie folgt aktualisieren.

%Vor%

für Beispiel

%Vor%     
Er. Mohit Agrawal 22.05.2015 04:20
quelle
5

Laravel tut das für Sie, aber Sie werden dieses Update nicht in Auth :: user () während derselben Anfrage sehen. Von /Illuminate/Auth/Guard.php (befindet sich direkt über dem Code, den Antonio in seiner Antwort erwähnt):

%Vor%

Wenn Sie also versucht haben, den Benutzernamen von "Alter Name" in "Neuer Name" zu ändern:

%Vor%

Und später in der gleichen Anfrage versuchen Sie, den Namen zu bekommen, indem Sie Auth::user()->name überprüfen, es wird Ihnen "Alter Name" geben

log::error(Auth::user()->name)); // Will be 'Old Name'

    
Jon 09.03.2015 03:48
quelle
2

[Diese Antwort ist besser für neuere Versionen von Laravel (nämlich Laravel 5)]

geeignet

Beim ersten Aufruf von Auth::user() holt es die Ergebnisse aus der Datenbank und speichert sie in einer Variablen.

Aber bei nachfolgenden Aufrufen holt es die Ergebnisse von der Variablen.

Dies wird aus dem folgenden Code im Rahmenwerk ersichtlich:

%Vor%

Wenn wir nun Änderungen am Modell vornehmen, werden die Änderungen automatisch auf das Objekt angewendet. Es enthält NICHT die alten Werte. Daher gibt es normalerweise keine Notwendigkeit, die Daten erneut aus der Datenbank abzurufen.

Es gibt jedoch bestimmte seltene Umstände, unter denen das erneute Abrufen der Daten aus der Datenbank nützlich wäre (z. B. um sicherzustellen, dass die Datenbank ihre Standardwerte anwendet oder wenn Änderungen an dem Modell durch eine andere Anforderung vorgenommen wurden). Führen Sie dazu die Methode fresh() wie folgt aus:

%Vor%     
Yahya Uddin 13.11.2016 21:35
quelle
1

Etwas spät zur Party, aber das hat für mich funktioniert:

%Vor%     
GTCrais 30.09.2016 18:15
quelle

Tags und Links