如何在Laravel Eloquent ORM中获取插入的多行数据

时间:2016-11-23 09:19:52

标签: php mysql arrays laravel eloquent

所以我设法使用laravel model::insert(array(...));

一次保存多个数据

示例数据

array (
  0 => 
  array (
    'organization' => '1',
    'status' => false,
    'project' => '1',
    'act_date' => '2016-11-23 08:19:06',
  ),
  1 => 
  array (
    'organization' => '1',
    'status' => false,
    'project' => '1',
    'act_date' => '2016-11-23 08:19:06',
  ),
)  

我想要的是获取插入数组的数据或id 至少。此数据还必须包含与插入的数据对应的多个ID(array({ data[0].id=>1 }, { data[1].id=>2 }))。

model::insert(array(...));的问题是,成功时会返回true,否则会返回false

model::create(array(...));返回插入行的数据,但不支持多行插入。

4 个答案:

答案 0 :(得分:1)

如果您想获取每个插入行的ID,我建议您使用create()方法。

但如果你真的想使用insert(),你可以试试这个(方法有它自己的缺点,但我不会用它):

model::insert($array);
$lastIds = model::orderBy('id', 'desc')->take(count($array))->pluck('id');

答案 1 :(得分:0)

  

我认为这种方法对你有帮助

 $data = array(
        array (
    'organization' => '1',
    'status' => false,
    'project' => '1',
    'act_date' => '2016-11-23 08:19:06',
  ),
        array (
    'organization' => '1',
    'status' => false,
    'project' => '1',
    'act_date' => '2016-11-23 08:19:06',
  ),
///////
    );

    Model::insert($data);
    DB::table('table')->insert($data);

答案 2 :(得分:0)

re:@Alexey Mezenin担心在高负载系统上返回错误的行。

对我来说有用的是生成随机字符串,或者你可以使用当前时间戳,并将其添加到我正在插入的每一行,我称之为“insert_key”,然后在批量插入完成后,我查询拥有“insert_key”的所有记录的数据库,现在我已经拥有了所有新插入的ID

答案 3 :(得分:0)

另一种方式:

    $savedIds = [];
    foreach($data as $record) {
        $savedIds[] = Model::insertGetId($record);
    }
    $savedRecords = Model::whereIn('id', $savedIds)->get();