【问题标题】:Laravel Eloquent - Inserting multiple objects at onceLaravel Eloquent - 一次插入多个对象
【发布时间】:2014-12-08 05:36:42
【问题描述】:

我正在通过读取 CSV 文件创建多个(有时数百,有时数千)Eloquent 对象。

以这个循环为例:

$cities = [];
while ($city = readNextCity()) {
  $cities[] = $city;
}
// ok how do I save all $cities without calling $city->save() on each?

我们知道在一个查询中插入多行比在每个查询中插入 1 行要高效得多。但是,有没有办法一次插入多个 eloquent 对象,以便将它们翻译成一个查询? (如果没有,我不介意写它,但我不想重复努力)。

【问题讨论】:

  • 不,你不能一次保存 Eloquent 模型。您应该使用Connection 方法insert,它接受与列对应的数组数组。所以除非你真的需要构建那些Models,否则不要,而是构建一个数组并将其传递给insert 方法。

标签: php mysql laravel eloquent


【解决方案1】:

我认为您可以为此使用查询生成器。

$cities = array();
$i=0;
while ($city = readNextCity()) {
  $cities[$i++] = array('city' => $city);
}

DB::table('city')->insert($cities);

希望这会有所帮助。

【讨论】:

  • 好的,试试看。仅供参考,您不需要像这样显式设置数组键。 $cities[] 将使用下一个可用的数组键。
  • 您也可以在这里阅读以上内容:- laravel.com/docs/4.2/queries#inserts
  • 不幸的是它不起作用。奇怪的是,Eloquent 不会将对象字段转换为数据库列:SQLSTATE[42S22]: Column not found: 1054 Unknown column '0' in 'field list' (SQL: insert into cities` (0, 1, 2, 3, 4) 值`
  • 你能在这里写下你的代码和表结构吗?因为它看起来像应该插入值的列没有正确分配。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多