【问题标题】:Laravel Scout - searching trashed records and keeping soft deleted models updatedLaravel Scout - 搜索已删除的记录并更新软删除的模型
【发布时间】:2017-03-30 14:01:37
【问题描述】:

默认情况下,Laravel Scout will remove 删除搜索索引中的任何模型,即使该模型被软删除。

我们如何才能将模型保留在搜索索引中并更新它以获取deleted_at 的当前时间戳,而不是被删除?

【问题讨论】:

    标签: php laravel elasticsearch algolia laravel-scout


    【解决方案1】:

    关键在于laravel-scout的源代码。首先我们应该熟悉Searchable.php 文件,毕竟它是我们应用于模型的特性,它开启了所有的魔力。 searchableunsearchable 方法的用途非常明确。

    现在注意两个静态方法enableSearchSyncingdisableSearchSyncing。这将让我们控制同步行为。如果我们回顾 introduction 到 laravel scout,它给了我们这样的提示:

    使用模型观察者,Scout 会自动保留您的搜索 与您的 Eloquent 记录同步的索引。

    所以我们应该把注意力转向ModelObserver.php。这就是一切发生的地方。观察者负责四个模型事件,createdupdateddeletedrestored

    updatedrestored 只需调用created 方法,该方法将检查是否确保未禁用同步,然后运行$model->searchable()

    deleted,我们要防止发生的事情非常相似。它将检查是否启用了同步,然后运行$model->unsearchable();

    解决方案:

    既然我们了解了它的工作原理,那么获得我们想要的效果就相对简单了。我们将从童子军手册中取出一页,并在删除时使用observers 来更新我们的搜索索引。这是它的样子:

    class UserObserver
    {
        /**
         * Listen to the User deleting event.
         * 
         * @param User $user
         */
        public function deleting(User $user)
        {
            $user::disableSearchSyncing();
        }
    
        /**
         * Listen to the User deleted event.
         * 
         * @param User $user
         */
        public function deleted(User $user)
        {
            $user::enableSearchSyncing();
    
            $user->searchable();
        }
    }
    

    创建观察者后,请确保不要忘记将其添加到 AppServiceProvider 的启动方法中,否则它将永远无法注册。

    class AppServiceProvider extends ServiceProvider
    {
        public function boot()
        {
            User::observe(UserObserver::class);
        }
    
    ...
    

    回顾一下它是如何工作的。在模型为 deleteddeleting 事件)之前,我们告诉 scout 停止同步。然后当模型被删除时,我们重新启用同步,并调用searchable 方法执行更新。我们在搜索数据库中的记录现在将使用正确的deleted_at 时间戳进行更新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-16
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 2016-08-10
      • 2019-06-18
      • 1970-01-01
      • 2021-10-02
      相关资源
      最近更新 更多