【问题标题】:How to insert multiple rows from a single query using eloquent/fluent如何使用 eloquent/fluent 从单个查询中插入多行
【发布时间】:2015-06-25 18:15:19
【问题描述】:

我有以下疑问:

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();

正如预期的那样,我得到以下结果:

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]

有没有办法将上面的结果复制到另一个表,让我的表看起来像这样?

ID|user_id|subject_id
1 |8      |9
2 |8      |2

我遇到的问题是$query 可以预期任意数量的行,因此我不确定如何遍历未知数量的行。

【问题讨论】:

标签: php sql laravel eloquent


【解决方案1】:

使用 Eloquent 或查询构建器在 Laravel 中进行批量插入非常容易。

您可以使用以下方法。

$data = [
    ['user_id'=>'Coder 1', 'subject_id'=> 4096],
    ['user_id'=>'Coder 2', 'subject_id'=> 2048],
    //...
];

Model::insert($data); // Eloquent approach
DB::table('table')->insert($data); // Query Builder approach

在您的情况下,您已经拥有 $query 变量中的数据。

【讨论】:

  • 在对象集合上使用 ->toArray() 方法。
  • 它不插入时间戳。
  • 将 'created_at'=>date('Y-m-d H:i:s'), 'modified_at'=> date('Y-m-d H:i:s') 添加到您的数组中。来源:stackoverflow.com/a/26569967/1316842
  • 我想知道为什么 Laravel 没有类似 'createMany' 的东西。
  • 如何检索 id?
【解决方案2】:

使用 Eloquent

$data = array(
    array('user_id'=>'Coder 1', 'subject_id'=> 4096),
    array('user_id'=>'Coder 2', 'subject_id'=> 2048),
    //...
);

Model::insert($data);

【讨论】:

  • insert 是查询生成器的方法。访问器和修改器不适用于此插入
【解决方案3】:

无论有没有查询构建器,在 Laravel 中进行批量插入都很容易。 您可以使用以下官方方法。

Entity::upsert([
    ['name' => 'Pierre Yem Mback', 'city' => 'Eseka', 'salary' => 10000000],
    ['name' => 'Dial rock 360', 'city' => 'Yaounde', 'salary' => 20000000],
    ['name' => 'Ndibou La Menace', 'city' => 'Dakar', 'salary' => 40000000]
], ['name', 'city'], ['salary']);

【讨论】:

  • 我可能弄错了,但这不是只有第 8 版吗?
猜你喜欢
  • 2017-11-28
  • 2011-08-01
  • 2018-08-26
  • 2013-01-06
  • 1970-01-01
  • 2011-03-17
  • 2013-11-06
  • 2019-10-04
  • 1970-01-01
相关资源
最近更新 更多