如何使用口才/流利的单个查询插入多行


143

我有以下查询:

  $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可以预期任意数量的行,因此不确定如何迭代未知数量的行。


Answers:


292

使用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变量中包含了数据。


7
在对象集合上使用-> toArray()方法。
Kreshnik Hasanaj

35
它不插入时间戳。
guy_fawkes

20
将'created_at'=> date('Ymd H:i:s'),'modified_at'=> date('Ymd H:i:s')添加到数组中。资料来源:stackoverflow.com/a/26569967/1316842
JR谭

8
我想知道为什么Laravel没有像'createMany'这样的东西。
阿布舍克(Abhishek)

4
如何获取ID?
Luvias '18

21

使用口才

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

Model::insert($data);

insert是查询生成器的方法。访问器和更改器无法与此插入一起使用
Hassan Dad Khan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.