Heim  >  Artikel  >  Backend-Entwicklung  >  Wie hört Eloquent ORM seine Ereignisse ab und verwendet dann Memcache, um die Daten zwischenzuspeichern?

Wie hört Eloquent ORM seine Ereignisse ab und verwendet dann Memcache, um die Daten zwischenzuspeichern?

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


Zuallererst verwendet meine Website derzeit diese Komponenten

"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"
    },

Weil ich die Event-Dispatcher-Komponente von Symfony anstelle der Event-Komponente von Laravel verwende
Also wann Der Eloquent ORM-Dienst ist initialisiert, die integrierte Ereignisüberwachungsfunktion kann nicht verwendet werden

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

Und ich möchte nicht zwei Komponenten mit doppelten Funktionen verwenden, daher kann ich den Eloquent ORM nicht überwachen. Die Ereignisse sind dann zwischengespeichert.
Was ich erreichen möchte, ist hauptsächlich die Verwendung von Memcache zum Zwischenspeichern der Daten von Eloquent ORM-Abfrageereignissen ...

Antwortinhalt:

Zunächst einmal. Meine Website verwendet derzeit diese Komponenten

"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"
    },

Da ich die Event-Dispatcher-Komponente von Symfony anstelle der Event-Komponente von Laravel verwende,
wenn der Eloquent ORM-Dienst initialisiert wird, ist dies mit der Funktion zum Festlegen der Ereignisüberwachung ausgestattet .

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

kann nicht verwendet werden und ich möchte nicht zwei Komponenten mit doppelten Funktionen verwenden, daher kann ich Eloquent ORM-Ereignisse nicht abhören und zwischenspeichern.
Was ich erreichen möchte, ist die Verwendung von Memcache zum Zwischenspeichern der Daten von Eloquent ORM-Abfrageereignissen ...


Es wird empfohlen, es zu verwenden remember Methode.

$value = Cache::remember('users', $minutes, function() {
    return DB::table('users')->get();
});

Wenn ein Cache vorhanden ist, werden die Daten im Cache direkt zurückgegeben. Andernfalls werden die Daten nach Abfrage der Datenbank und Festlegen des Caches zurückgegeben.

Was das Ersetzen des von Ihnen erwähnten Ereignis-Dispatchers betrifft, kann die Überwachung von Modellereignissen im Modell oder Basisklassenmodell geschrieben werden, zum Beispiel:

protected static function boot()
{
    parent::boot();
    
    static::created(function ($model) {
        // cache model
    });
}

Jedes Ereignis hat seine entsprechende statische Methode : saving saved updating updated creating created deleting deleted

以上就是Eloquent ORM该怎么监听它的事件然后使用memcache缓存数据的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn