Laravel Eloquent仅当一个字段作为数组提供时才插入多个记录

时间:2017-10-15 05:43:45

标签: php mysql arrays laravel eloquent

如果只有一个字段作为数组提供,Laravel / Eloquent是否提供了通过一次调用创建多个记录的方法?

例如,我收到$ request请求下面的数据,但只有propIds会爆炸并作为数组提供,所有其他值对于所有新记录都是相同的。

{"_token": "kEKmrPzu4nCk35xJAMOgdl0kNdwUZvpECsBl91dH",
"propIds": "126,129,71,82,77,64,69",
"rate": "4",
"cost": "55"
}

我可以做一个foreach并构建一个数组,然后运行Model::insert($newArray); 但是,如果只有一个字段作为数组提供,Laravel可能会提供解决方案。感谢。

现在我只是使用foreach循环来创建数组,然后调用Model::insert($newArray);

使用Model::insert($newArray); 插入多个记录不会自动添加created_at和updated_at日期。我在数据库中添加了一个时间戳作为默认值。

2 个答案:

答案 0 :(得分:0)

是的,这是可能的。您需要使用insert()并使用以下格式创建一个新数组:

Model::insert([
    ['prop_id' => 126, 'rate' => 4, 'cost' => 55],
    ['prop_id' => 129, 'rate' => 4, 'cost' => 55],
    ['prop_id' => 71, 'rate' => 4, 'cost' => 55],
]);

insert()只会创建一个数据库查询。

答案 1 :(得分:0)

您可以覆盖Laravel Models create功能,如下所示:

<强>模型

namespace App\Models;

class YourModel extends BaseModel
{
  protected $fillable = [
    "_token", "propId", "rate", "cost"
  ];

  // override
  public static function create(array $attributes = [])
  {
    $propIds = array_explode(',', $attributes['propIds']);

    foreach ($propIds as $key => $value) {        
      $model = new static([
        "_token"  => $attributes['_token'],
        "propId"  => $value,
        "rate"    => $attributes['rate'],
        "cost"    => $attributes['cost']
      ]);

      $model->save();
    }
  }
}

<强>控制器

YourModel::create([
   "_token"  => $request->input('_token'),
   "propIds" => $request->input('propIds'), // "126,129,71,82,77,64,69"
   "rate"    => $request->input('rate'),
   "cost"    => $request->input('cost'),
]);