多次插入相关表

时间:2015-12-02 11:20:30

标签: php laravel laravel-5 eloquent laravel-5.1

我想问一下你是否有人试图在相关表格中一次插入多条记录? 这是场景。我有一张药物和药物运动表。现在我想使用xls文件作为源将记录插入到两个表中。所以这个xls文件包含数千条记录。到用户上传该文件时。该文件的所有内容都将插入表中。现在我正在考虑批量上传。但我不知道最好的方法是什么。

以下是架构

========药物表==========

class Drug extends Model
{
    public function drugMovements() {
        return $this->hasMany('App\DrugMovement');
    }
}

========药物运动===========

class DrugMovement extends Model
{

    public function drug() {
        return $this->belongsTo('App\Drug');
    }
}

现在我想将记录保存到这个表中,同时插入一千条记录。我怎样才能做到这一点? 如果我做这样的事情,那么这将浪费资源,因为我需要循环到所有记录并进行数千次插入。

foreach($datas as $data) {
  $drug = Drug::create([
        "pharmacy_id"     => 1,
        "name"            => $data->drug_name,
        "strength"        => $data->strength,
   ]);

  $drug_movements = new DrugMovement([
        "drug_id"         => $drug->id,
        "quantity"        => $data->quantity,
        "pharmacist_id"   => 1,
    ]);

  $drug->drugMovements()->save($drug_movements);
  $drug->save();
}

正如您所看到的,如果数据有数千条记录,它将插入数千次。我该如何优化呢?

1 个答案:

答案 0 :(得分:0)

最好的办法是制作两个数组,然后将它们插入数据库。

$latestDrugID = Drug::max('id'); 
// Of course if your database is empty start from `1`

foreach($datas as $data) {
    $drugs[] = [
        "pharmacy_id"     => 1,
        "name"            => $data->drug_name,
        "strength"        => $data->strength,
     ];

    $drug_movements[] = [
        "drug_id"         => $latestDrugID++,
        "quantity"        => $data->quantity,
        "pharmacist_id"   => 1,
    ];
}

Drug::insert($drugs);
DrugMovement::insert($drug_movements);

PS:您可能希望将这些数组分成小块,具体取决于数据的大小。