当前位置: 首页 > 知识库问答 >
问题:

使用insert()并进行批量插入似乎不会触发scout对Algolia的插入

宿鹏程
2023-03-14

我正在做一个大批量插入在拉威尔像

\App\Example::insert([
    [
        'name' => 'abc',
        'value' => '123',
    ],
    [
        'name' => 'def',
        'value' => '456',
    ],
    // etc...
]);

这将执行批量插入,一次查询,但仍同时插入多行。

问题是,当我使用插入()时,行不会插入到Algolia中。那么,我怎样才能批量插入到阿尔戈利亚呢?

我不想循环通过我的行和做一个插入一次,因为这将花费额外的请求

共有2个答案

邓深
2023-03-14

您只需拨打-

谷玉韵
2023-03-14

问题是laravelscoutmodel::created方法上创建了Algolio Searchable

您可以在源代码中查看这一点。

由于Laravel不会在Mass events上生成created/updated/deleted事件,这意味着Algolio也不会收到这些事件。

解决这个问题的一个选择是获取最近的自动增量ID,然后在插入之后再次获取该ID,然后调用-

 DB::transaction(function() {
    $currentId = \App\Example::max('id');
    // do the insert
    $lastId = \App\Example::max('id');

    \App\Example::where('id', '>', $currentId)->where('id', '<=', $lastId)->searchable();
 });

通过使用事务,我们确保$lastId不会被并行查询损坏。以这种方式,我们必须执行4个查询,这与几十个或更多的查询相比仍然是名义上的。

老实说,您可能会更简化代码。

 类似资料:
  • 问题内容: 有没有一种方法可以使用JPA EntityManager使用批处理插入。我知道没有直接方法可以实现这一目标,但是必须有某种方法可以实现这一机制。 实际上,对于每一次插入操作,我要花300毫秒,我想减少使用批量插入而不是单次插入的时间。 这是我目前正在执行的用于单次插入的代码 提前致谢。 问题答案: 它 是 可以进行使用JPA成批写操作,但它是高度依赖于具体的实现你的持久性提供数据库和J

  • 问题内容: 如果使用https://github.com/felixge/node- mysql之类的 东西,如何将大量插入MySQL中 问题答案: 使用嵌套数组可以进行大容量插入,请参见github页面 嵌套数组变成分组列表(用于批量插入),例如 变成 您只需插入一个嵌套的元素数组。 这里给出一个例子 注意:是一个包装在数组中的数组数组 还有用于批量插入的完全不同的node-msql软件包

  • insert 插入数据到表中insert($table, $data) table [string] 表名. data [array] 插入到表里的数据.Return: [number] 返回插入的id $last_user_id = $database->insert("account", [ "user_name" => "foo", "email" => "foo@bar.com

  • insert 插入数据到表中insert($table, $data) table [string] 表名. data [array] 插入到表里的数据.Return: [number] 返回插入的id $last_user_id = $database->insert("account", [ "user_name" => "foo", "email" => "foo@bar.com

  • 问题内容: 我有许多记录需要输入到表中。在查询中执行此操作的最佳方法是什么?我是否应该进行循环并在每次迭代中插入一条记录?或者,还有更好的方法? 问题答案: 从MySQL手册 使用VALUES语法的INSERT语句可以插入多行。为此,请包括多个列值列表,每个列值括在括号内并用逗号分隔。例:

  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出