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

Bil*_*lly 109 php sql laravel eloquent

我有以下查询:

  $query = UserSubject::where('user_id', Auth::id())->select('subject_id')->get();
Run Code Online (Sandbox Code Playgroud)

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

[{"user_id":8,"subject_id":9},{"user_id":8,"subject_id":2}]
Run Code Online (Sandbox Code Playgroud)

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

ID|user_id|subject_id
1 |8      |9
2 |8      |2
Run Code Online (Sandbox Code Playgroud)

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

Kre*_*naj 244

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

您可以使用以下方法.

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

Model::insert($data); // Eloquent approach
DB::table('table')->insert($data); // Query Builder approach
Run Code Online (Sandbox Code Playgroud)

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

  • 它不插入时间戳. (26认同)
  • 将'created_at'=> date('Ymd H:i:s'),'modified_at'=> date('Ymd H:i:s')添加到数组中.来源:http://stackoverflow.com/a/26569967/1316842 (15认同)
  • 我想知道为什么Laravel没有像'createMany'这样的东西. (7认同)
  • 在对象集合上使用 - > toArray()方法. (6认同)
  • 如何检索ID? (3认同)

Vis*_*ney 15

使用Eloquent

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

Model::insert($data);
Run Code Online (Sandbox Code Playgroud)

  • insert 是查询生成器的方法。访问器和修改器不适用于此插入 (4认同)

小智 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']);
Run Code Online (Sandbox Code Playgroud)

  • 我可能弄错了,但这不是只有8版本吗? (3认同)