jeudi 7 juillet 2016

Laravel caching authenticated user's relationships

In my application I use Laravel's authentication system and I use dependency injection (or the Facade) to access the logged in user. I tend to make the logged in user accessible through my base controller so I can access it easily in my child classes:

class Controller extends BaseController
{
    protected $user;

    public function __construct()
    {
        $this->user = \Auth::user();
    }
}

My user has a number of different relationships, that I tend to eager load like this:

$this->user->load(['relationshipOne', 'relationshipTwo']);

As in this project I'm expecting to receive consistently high volumes of traffic, I want to make the application run as smoothly and efficiently as possible so I am looking to implement some caching.

I ideally, need to be able to avoid repeatedly querying the database, particularly for the user's related records. As such I need to look into caching the user object, after loading relationships.

I had the idea to do something like this:

public function __construct()
{
    $userId = \Auth::id();
    if (!is_null($userId)) {
        $this->user = \Cache::remember("user-{}", 60, function() use($userId) {
            return User::find($userId);
        });
    }
}

However, I'm unsure whether or not it's safe to rely on whether or not \Auth::id() returning a non-null value to pass authentication. Has anyone faced any similar issues?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire