首页 > 解决方案 > Laravel Scout:仅在特定字段更改时更新

问题描述

我正在尝试通过仅在我关心的数据发生更改时更新我的​​ Algolia 记录(从而节省数千次不必要的操作)来优化我的应用程序。

我有一个表格,其中包含有关各种产品的价格信息,当价格变化时每分钟更新一次。目前,Algolia 中的可搜索模型与预期保持同步,但这是不必要的,因为我网站上的搜索功能只提供产品本身的搜索,而不是价格。

目前,每次在模型上调用该方法时,Scout 都会在 Algolia 中执行一次操作(每个update()模型每分钟一次)。

有没有一种方法可以有条件地触发 Algolia 仅在模型的制造商、产品或变体发生变化而不是价格发生变化时进行更新?

我的模型上的toSearchableArray()功能目前看起来像这样,如果这有帮助的话:

public function toSearchableArray() {

            return [
                'id'                    => $this->id,
                'manufacturer'          => $this->manufacturer,
                'product'               => $this->product,
                'variant'               => $this->variant,
            ];
        }

标签: phplaravelalgolialaravel-scout

解决方案


withoutSyncingToSearch 方法是你要找的吗?

这意味着在您当前使用此方法更新价格的任何地方进行包装。

虽然您的问题中未提供此代码,但我假设以下内容:

\App\Model::withoutSyncingToSearch ( function() use ($item, $newPrice) {
    $item->price = $newPrice;
    $item->save();
});

可以为你工作吗?


推荐阅读