Laravel Разведчик: обновлять только при изменении указанных полей c - PullRequest
0 голосов
/ 14 апреля 2020

Я пытаюсь оптимизировать свое приложение, только обновляя свои записи Algolia (и, следовательно, экономя на тысячах ненужных операций), когда меняются данные, которые меня волнуют.

У меня есть таблица, в которой хранится информация о цене различные продукты, которые обновляются каждую минуту, когда меняется цена. В настоящее время поисковая модель в Алголии поддерживается в синхронизации c с этим, как и предполагалось, но в этом нет необходимости, поскольку функция поиска на моем сайте обеспечивает поиск только по самим продуктам, а не по ценам.

В настоящее время Scout выполняет операцию в Алголии каждый раз, когда метод update() вызывается для модели (один раз каждую минуту для каждой модели).

Есть ли способ, которым я мог бы условно вызвать Обновлять Algolia только при изменении производителя, продукта или варианта модели, а не цены?

Функция toSearchableArray() на моей модели в настоящее время выглядит следующим образом, если это вообще помогает:

public function toSearchableArray() {

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

1 Ответ

1 голос
/ 14 апреля 2020

Является ли метод withoutSyncingToSearch тем, что вы ищете?

Это будет означать перенос, где бы вы ни обновляли свои цены в этом методе.

Хотя этот код не указан в вашем вопросе, я предполагаю, что что-то вроде:

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

может работать для вас?

...