Copiare record in Laravel

Mattepuffo's logo
Copiare record in Laravel

Copiare record in Laravel

Se usiamo Laravel ed Eloquent possiamo facilmente copiare un record usando i nostri model.

In questo articolo vediamo un esempio, che sto usando in produzione.

Partiamo dal mio model:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Archivio extends Model {
  protected $table = 'archivi';
  protected $primaryKey = 'arc_id';
  public $incrementing = true;
  public $timestamps = false;

  protected $fillable = [
      "arc_id",
      "arc_tabella",
      "arc_campo",
      "arc_campo_id",
      "arc_nome",
      "arc_path",
      "arc_categoria",
      "arc_sub_categoria",
      "arc_data_aggiunta",
  ];
}

Nel mio controller avrò una funzione di questo tipo:

  public function copy(Request $req) {
    $data = $req->json()->all();
    $id = $data['arc_id'];
    $campoId = $data['arc_campo_id'];
    $today = date("Y-m-d H:i:s");

    $item = Archivio::find($id);
    if ($item) {
      $newItem = $item->replicate();
      $newItem->arc_campo_id = $campoId;
      $newItem->arc_data_aggiunta = $today;
      $newItem->save();

      return response()->json([
          'res' => 'ok',
          'message' => 'File caricato correttamente'
      ]);

    } else {
      return response()->json([
          'res' => 'ko',
          'message' => 'Nessun file copiato'
      ]);
    }
  }

Come vedete abbiamo:

  1. usato find per identificare il record da copiare
  2. creato un nuovo oggetto usando replicate per farne una copia
  3. modificato i campi di nostro interesse sul nuovo oggetto
  4. fatto il salvataggio

Nel mio caso i due dati che mi servono mi arrivano in post in formato JSON.

Enjoy!


Condividi

Commentami!