【问题标题】:laravel scout temporary disable toSearchableArray when doing updateslaravel scout 在进行更新时临时禁用 toSearchableArray
【发布时间】:2018-03-27 14:57:32
【问题描述】:

是否可以在更新记录时禁用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;
}

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

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

如下所示,仅更新标题,然后更新我的 algolia 索引中的标题,而无需重置 uploaded_at 或再次加载 category 关系

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

【问题讨论】:

  • 没有办法做到这一点。能分享一下背后的原因吗?我不明白为什么不完全更新模型。
  • @JulienBourdeau 可以说我只想更新标题。如果我现在更新我的标题toSearchableArray() 也会导致我的uploaded_at 被重置为一个新的时间戳,这是错误的,因为我在 1 周前创建了帖子。
  • @JulienBourdeau 但我也有这样的东西 $item['category'] = $this->category->category_name;这将在我的类别表上进行内部连接查询以获取名称,并且我将再进行 5 次这样的查询,以便根据连接查询获取某个名称。这将导致我的应用程序执行 6 个以上的查询,因为我从第一次索引时就有了这些查询。我宁愿只更新特定字段并将其推送到 Algolia
  • @JulienBourdeau 因为我已经有了 Algolia php 客户端,所以我改用了 $index->partialUpdateObject() 来修复它。无论如何,非常感谢您帮助我解决的其他问题!

标签: laravel algolia searchable laravel-scout


【解决方案1】:

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

$modal->unsearchable();

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

$modal->save()

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

$modal->searchable();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多