【发布时间】: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