执行更新时,laravel scout临时禁用toSearchableArray

时间:2018-03-27 14:57:33

标签: laravel algolia searchable laravel-scout

是否可以在对记录进行更新时禁用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中的所有内容

与bellow一样,只更新标题,然后更新我的algolia索引中的标题,而不重置uploaded_at或再次加载category关系

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

1 个答案:

答案 0 :(得分:0)

您可以使用laravel scout中可用的unsearchable函数。

$modal->unsearchable();

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

$modal->save()

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

$modal->searchable();