如何使用 eloquent/fluent 从单个查询中插入多行

问题描述 投票:0回答:3

我有以下疑问:

  $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
3个回答
443
投票

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

您可以使用以下技术之一。

$data = [
    ['user_id'=>'Coder 1', 'subject_id'=> 4096],
    ['user_id'=>'Coder 2', 'subject_id'=> 2048],
    //...
];
  1. 雄辩的方法:
Model::insert($data); // calls mutators including timestamps
  1. 查询生成器方法:
DB::table('table')->insert($data); // does not call mutators

37
投票

使用雄辩

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

Model::insert($data);

8
投票

无论有没有查询生成器,在 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']);
© www.soinside.com 2019 - 2024. All rights reserved.