gpt4 book ai didi

php - Laravel Scout - 搜索垃圾记录并保持软删除模型更新

转载 作者:行者123 更新时间:2023-12-02 22:23:17 25 4
gpt4 key购买 nike

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

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

最佳答案

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

现在注意两个静态方法 enableSearchSyncingdisableSearchSyncing .这将使我们能够控制同步行为。如果我们回顾一下 introduction对于 laravel scout,它给了我们这个提示:

Using model observers, Scout will automatically keep your search indexes in sync with your Eloquent records.

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

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);
}

...

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

关于php - Laravel Scout - 搜索垃圾记录并保持软删除模型更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43120174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com