创建observer文件
php artisan make:observer PostObserver --model=Models/Post
在App\Providers\AppServiceProvider下面开启observer
public function boot()
{
     Post::observe(PostObserver::class);
}监听该模块下的增删改操作
<?php
namespace App\Observers;
use App\Models\Post;
use Elasticsearch\ClientBuilder;
use Illuminate\Support\Facades\Log;
class PostObserver
{
    public function created(Post $post)
    {
        //
    }
    public function updated(Post $post)
    {
        // 监听Post更新操作,更新elasticsearch索引
        $hosts = ['http://ip:9200'];
        $client = ClientBuilder::create()           // Instantiate a new ClientBuilder
        ->setHosts($hosts)      // Set the hosts
        ->build();
    
        $params = [
            'index' => 'es_test',
            'type' => 'lesson',
            'id' => $post->id,
            'body' => [
                'doc' => [
                    'title' => $post->title
                ]
            ]
        ];
        // 在 /my_index/my_type/my_id 中更新文档
        $response = $client->update($params);
    }
    public function deleted(Post $post)
    {
        //
    }
    public function restored(Post $post)
    {
        //
    }
    public function forceDeleted(Post $post)
    {
        //
    }
}注意:更新数据的时候需要观察者只能监听 ORM Query,如果直接使用post更新是Database Query更新,不能触发观察者更新操作。
Post::where('id', 1)->update(['status'=>1]);可以替换为如下写法
Post::where('id', 1)->first()->update(['status'=>1]);
// 或者
$model = Post::where('id', 1)->first();
$model->update(['status'=>1]);
$model->save();
        宠物免费领养小程序,欢迎来踩