Home  >  Article  >  Backend Development  >  How does Eloquent ORM listen to its events and then use memcache to cache the data?

How does Eloquent ORM listen to its events and then use memcache to cache the data?

PHP中文网
PHP中文网Original
2016-09-03 00:14:121268browse


First of all, my website currently uses these components

"require": {
        "symfony/http-foundation": "^3.1",
        "symfony/routing": "^3.1",
        "symfony/http-kernel": "^3.1",
        "symfony/event-dispatcher": "^3.1",
        "pimple/pimple": "~3.0",
        "illuminate/database": "^5.3"
    },

Because I use symfony's event-dispatcher component instead of laravel's events component,
so this comes with the setting event when the Eloquent ORM service is initialized The monitoring function does not work

use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));

and I don’t want to use two components with duplicate functions, so I cannot monitor the Eloquent ORM events and cache them.
What I want to achieve is mainly to use memcache to cache the data of Eloquent ORM query events. How to do this step...

Reply content:

First of all, my website currently uses these components

"require": {
        "symfony/http-foundation": "^3.1",
        "symfony/routing": "^3.1",
        "symfony/http-kernel": "^3.1",
        "symfony/event-dispatcher": "^3.1",
        "pimple/pimple": "~3.0",
        "illuminate/database": "^5.3"
    },

Because I use Symfony's event-dispatcher component does not use Laravel's events component. So when the Eloquent ORM service is initialized, the built-in event monitoring function cannot be used.

use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));
And I don't want to use two components with duplicate functions. So there is no way to listen to Eloquent ORM events and cache them.

What I want to achieve is to use memcache to cache the data of Eloquent ORM query events. How to do this step...


It is recommended to use the

remember method to cache query data.

$value = Cache::remember('users', $minutes, function() {
    return DB::table('users')->get();
});
If there is a cache, the data in the cache will be returned directly. Otherwise, the data will be returned after querying the database and setting the cache.

As for what you said about replacing the event dispatcher, how to monitor model events can be written in the model or base class model, for example:

protected static function boot()
{
    parent::boot();
    
    static::created(function ($model) {
        // cache model
    });
}
Each event has its corresponding static method:

saving saved updating updated creating created deleting deleted

The above is how Eloquent ORM listens to its events and then uses memcache to cache the data. For more related content, please pay attention to the PHP Chinese website (www.php .cn)!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn