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:
- usato find per identificare il record da copiare
- creato un nuovo oggetto usando replicate per farne una copia
- modificato i campi di nostro interesse sul nuovo oggetto
- fatto il salvataggio
Nel mio caso i due dati che mi servono mi arrivano in post in formato JSON.
Enjoy!
php laravel eloquent replicate
Commentami!