簡體   English   中英

Laravel雄辯地插入多個記錄,僅當一個字段作為數組提供時

[英]Laravel Eloquent Insert Multiple records only if one field is provided as an array

如果僅將一個字段作為數組提供,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日期 我在數據庫中添加了一個時間戳作為默認值。

是的,有可能。 您需要使用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()將僅創建一個數據庫查詢。

您可以重寫Laravel模型的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'),
]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM