1

是否可以toSearchableArray在更新记录时禁用,或者有没有办法只更新搜索索引中记录中的特定字段?

例如:

public function toSearchableArray()
{
          $item = $this->toArray();
        $item['title'] = $this->title;
         ...
         ...
         ...
         $item['category'] = $this->category->category_name;
         $item['uploaded_at'] = Carbon::now('America/Montreal')->timestamp;
}

现在唯一的问题是每次我更新一条记录时,它也会重置它的 Uploaded_at 时间戳并重新加载关系,这是我不需要的另一个查询,因为它在我创建项目时已经设置了它。

那么有什么办法可以暂时禁用toSearchableArray吗?我只需要更新索引行中的几个字段,因此无需重新运行 toSearchableArray 中的所有内容

像下面一样只更新标题,然后在我的 algolia 索引中更新标题,而无需再次重置uploaded_at或加载category关系

$order = App\Order::find(1);
$order->title = 'a new title'
$order->save();
4

1 回答 1

0

您可以使用 unsearchablelaravel scout 中提供的功能。

$modal->unsearchable();

//etc.....
//Finally save the modal

$modal->save()

这样,当您保存或更新时,它不会同步到 algolia。如果您再次想将模型同步到 algolia,您可以调用searchable如下所示的方法。

$modal->searchable();
于 2019-04-10T07:11:03.690 回答