Eloquent ORM はどのようにイベントをリッスンし、memcache を使用してデータをキャッシュするのでしょうか?

PHP中文网
リリース: 2016-09-03 00:14:12
オリジナル
1265 人が閲覧しました


まず第一に、私のウェブサイトは現在これらのコンポーネントを使用しています

"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"
    },
ログイン後にコピー
ログイン後にコピー

laravelのイベントコンポーネントの代わりにsymfonyのイベントディスパッチャーコンポーネントを使用しているため
、これにはEloquent ORMサービスが初期化されるときに設定イベントが付属しています監視機能は動作しません

use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));
ログイン後にコピー
ログイン後にコピー

と、重複した機能を持つ 2 つのコンポーネントを使用したくないので、Eloquent ORM イベントを監視してキャッシュすることができません。
私が達成したいのは、主に memcache を使用して Eloquent ORM クエリ イベントのデータをキャッシュすることです。この手順を実行する方法...

返信内容:

まず第一に、私の Web サイトは現在これらのコンポーネントを使用しています

"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"
    },
ログイン後にコピー
ログイン後にコピー

私が使用している Symfony のイベントディスパッチャーコンポーネントは Laravel のイベントコンポーネントを使用していないため、Eloquent ORM サービスが初期化されると、組み込みのイベント監視機能が使用できなくなります。また、重複した機能を持つ 2 つのコンポーネントを使用したくありません。したがって、Eloquent ORM イベントをリッスンしてキャッシュする方法はありません。
私が実現したいのは、memcache を使用して Eloquent ORM クエリ イベントのデータをキャッシュすることです。この手順を実行する方法...


キャッシュには remember メソッドを使用することをお勧めします。クエリデータ。

use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));
ログイン後にコピー
ログイン後にコピー
キャッシュがある場合は、キャッシュ内のデータが直接返されます。そうでない場合は、データベースにクエリを実行し、キャッシュを設定した後にデータが返されます。

remember 方法。

$value = Cache::remember('users', $minutes, function() {
    return DB::table('users')->get();
});
ログイン後にコピー

有缓存就直接返回缓存里的数据,否则从数据库查询并设置缓存后返回数据。

至于你说的替换了event dispatcher,怎么监听model事件,可以在model或者基类model里写, 例如:

protected static function boot()
{
    parent::boot();
    
    static::created(function ($model) {
        // cache model
    });
}
ログイン後にコピー

每个事件都有其对应的静态方法:saving saved updating updated creating created deleting deleted

以上就是Eloquent ORM该怎么监听它的事件然后使用memcache缓存数据的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!あなたが言及したイベントディスパッチャーの置き換えに関しては、モデルイベントを監視する方法は、モデルまたは基本クラスモデルに記述することができます。例:

rrreee🎜各イベントには、対応する静的メソッドがあります: Saving 保存 更新 更新 作成 作成 削除 削除🎜🎜上記は、Eloquent ORM がイベントをリッスンし、memcache を使用してデータをキャッシュする方法です。関連コンテンツの詳細については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。 🎜
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート