{"id":72394,"date":"2023-08-17T09:56:27","date_gmt":"2023-08-17T08:56:27","guid":{"rendered":"https:\/\/kinsta.com\/it\/?p=72394&#038;preview=true&#038;preview_id=72394"},"modified":"2023-08-21T09:00:29","modified_gmt":"2023-08-21T08:00:29","slug":"laravel-crud","status":"publish","type":"post","link":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/","title":{"rendered":"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel"},"content":{"rendered":"<p><a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> \u00e8 un <a href=\"https:\/\/kinsta.com\/it\/blog\/framework-laravel\/\">framework PHP<\/a> molto popolare per la creazione di applicazioni web moderne e dinamiche nel panorama dello sviluppo web odierno, in continua e rapida evoluzione. Una delle sue caratteristiche principali \u00e8 <a href=\"https:\/\/laravel.com\/docs\/10.x\/eloquent\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Eloquent<\/a>, un <a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\" target=\"_blank\" rel=\"noopener noreferrer\">mapper relazionale a oggetti<\/a> (ORM) che consente a chi sviluppa di eseguire in modo efficiente le operazioni di creazione, lettura, aggiornamento e cancellazione (Create, Read, Update, e Delete, che compongono l\u2019acronimo CRUD) su un database.<\/p>\n<p>Questo tutorial mostra come eseguire queste operazioni in un\u2019applicazione Laravel usando l&#8217;ORM Eloquent di Laravel e come distribuire un&#8217;applicazione Laravel CRUD con <a href=\"https:\/\/kinsta.com\/it\/mykinsta\/\">MyKinsta<\/a>.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Funzionalit\u00e0 CRUD in Laravel<\/h2>\n<p>Le operazioni CRUD sono la spina dorsale di qualsiasi applicazione fondata su database. Permettono di eseguire le operazioni pi\u00f9 basilari ed essenziali del database, come la creazione di nuovi record, la lettura di quelli esistenti, l&#8217;aggiornamento e la cancellazione. Queste operazioni sono fondamentali per la funzionalit\u00e0 di qualsiasi <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#laravel\">applicazione Laravel<\/a> che interagisce con un database.<\/p>\n<p>Eloquent offre un modo semplice e intuitivo di interagire con il database, riducendo le complessit\u00e0 della gestione del database in modo che possiate concentrarvi sulla creazione della vostra applicazione. I suoi metodi e le sue classi integrate permettono di eseguire facilmente il CRUD dei record nel database.<\/p>\n<h3>Prerequisiti<\/h3>\n<p>Per seguire questo tutorial, \u00e8 necessario avere i seguenti requisiti:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.apachefriends.org\/download.html\" target=\"_blank\" rel=\"noopener noreferrer\">XAMPP<\/a><\/li>\n<li><a href=\"https:\/\/getcomposer.org\/download\/\" target=\"_blank\" rel=\"noopener noreferrer\">Composer<\/a><\/li>\n<li><a href=\"https:\/\/my.kinsta.com\/login\/?lang=it\">Un account MyKinsta<\/a><\/li>\n<li>Un account su <a href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>, <a href=\"https:\/\/gitlab.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitLab<\/a> o <a href=\"https:\/\/bitbucket.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bitbucket<\/a> per inviare il vostro codice<\/li>\n<li><a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap versione 5<\/a><\/li>\n<\/ul>\n<h3>Passaggi<\/h3>\n<ol start=\"1\">\n<li>Installare Laravel e creare una nuova applicazione<\/li>\n<li>Creare un database<\/li>\n<li>Creare una tabella<\/li>\n<li>Creare un controller<\/li>\n<li>Impostare il modello<\/li>\n<li>Aggiungere un percorso<\/li>\n<li>Generare i file Blade<\/li>\n<li>Distribuire e testare la vostra applicazione CRUD<\/li>\n<\/ol>\n<p>Per avere una guida lungo il percorso, date un&#8217;occhiata al <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\" target=\"_blank\" rel=\"noopener noreferrer\">codice completo<\/a> del tutorial.<\/p>\n<h2>Installare Laravel e creare una nuova applicazione<\/h2>\n<p>Aprite il terminale in cui volete creare la vostra applicazione Laravel e seguite i passaggi qui sotto.<\/p>\n<ol start=\"1\">\n<li>Per installare Laravel, eseguite:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">composer global require laravel\/installer<\/code><\/pre>\n<ol start=\"2\">\n<li>Per creare una nuova applicazione Laravel, eseguite:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">laravel new crudposts<\/code><\/pre>\n<h2>Creare un database<\/h2>\n<p>Per creare un nuovo database per la vostra applicazione:<\/p>\n<ol start=\"1\">\n<li>Avviate i server Apache e MySQL nel pannello di controllo di XAMPP e visitate <code>http:\/\/localhost\/phpmyadmin<\/code> nel browser.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Fate clic su <strong>New<\/strong> nella barra laterale sinistra. Dovreste vedere quanto segue:<\/li>\n<\/ol>\n<figure style=\"width: 1134px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/phpmyadmin-form-create-db.png\" alt=\"Il modulo di creazione del database.\" width=\"1134\" height=\"315\"><figcaption class=\"wp-caption-text\">Il modulo di creazione del database.<\/figcaption><\/figure>\n<ol start=\"3\">\n<li>Aggiungete un nome al database e fate clic su <strong>Create<\/strong>.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Modificate il file <strong>.env<\/strong> della vostra applicazione nella root dell\u2019applicazione Laravel. Esso contiene tutte le variabili d&#8217;ambiente utilizzate dall&#8217;applicazione. Individuate le variabili con il prefisso <code>DB_<\/code> e modificatele con le credenziali del vostro database:<\/li>\n<\/ol>\n<pre><code class=\"language-env\">DB_CONNECTION=\nDB_HOST=\nDB_PORT=\nDB_DATABASE=\nDB_USERNAME=\nDB_PASSWORD=<\/code><\/pre>\n<h2>Creare una tabella<\/h2>\n<p>Le righe di dati della vostra applicazione sono memorizzate in tabelle. Per questa applicazione avete bisogno di una sola tabella, creata usando le <a href=\"https:\/\/laravel.com\/docs\/10.x\/migrations\" target=\"_blank\" rel=\"noopener noreferrer\">migrazioni di Laravel<\/a>.<\/p>\n<ol start=\"1\">\n<li>Per creare una tabella e generare un file di migrazione utilizzando l&#8217;interfaccia a riga di comando di Laravel, Artisan, eseguite questo codice:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:migration create_posts_table<\/code><\/pre>\n<p>Il comando precedente crea un nuovo file,<\/p>\n<p><strong>yyyy_mm_dd_hhmmss_create_posts_table.php<\/strong>, in <strong>database\/migrazioni<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Aprite <strong>yyyy_mm_dd_hhmmss_create_posts_table.php<\/strong> per definire le colonne che desiderate all&#8217;interno della tabella del database nella funzione up:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function up()\n{\n  Schema::create('posts', function (Blueprint $table) {\n\t$table-&gt;id();\n\t$table-&gt;string('title');\n\t$table-&gt;text('body');\n\t$table-&gt;timestamps();\n  });\n}<\/code><\/pre>\n<p>Questo codice definisce il contenuto della tabella dei post. Ha quattro colonne: <code>id<\/code>, <code>title<\/code>, <code>body<\/code>, e <code>timestamps<\/code>.<\/p>\n<ol start=\"3\">\n<li>Eseguite i file di migrazione nella cartella <strong>database\/migrations<\/strong> per creare le tabelle nel database:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan migrate<\/code><\/pre>\n<p>L&#8217;output appare come questo:<\/p>\n<figure style=\"width: 614px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-run-migrations.png\" alt=\"Esecuzione delle migrazioni\" width=\"614\" height=\"403\"><figcaption class=\"wp-caption-text\">Esecuzione delle migrazioni.<\/figcaption><\/figure>\n<ol start=\"4\">\n<li>Andate al database creato in precedenza per confermare la creazione delle tabelle:<\/li>\n<\/ol>\n<figure style=\"width: 1053px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-posts-table.png\" alt=\"Tabelle create.\" width=\"1053\" height=\"209\"><figcaption class=\"wp-caption-text\">Tabelle create.<\/figcaption><\/figure>\n<h2>Creare un controller<\/h2>\n<p>Il controller contiene tutte le funzioni per il CRUD dei post dal database.<\/p>\n<p>Generate un file controller all&#8217;interno della vostra applicazione Laravel usando Artisan:<\/p>\n<pre><code class=\"language-sh\">php artisan make:controller PostController --api<\/code><\/pre>\n<p>L&#8217;esecuzione di questo comando crea un file<strong> PostController.php<\/strong> in <strong>app\/Http\/Controllers<\/strong>, con codice boilerplate e dichiarazioni di funzioni vuote <code>index<\/code>, <code>store<\/code>, <code>show<\/code>, <code>update<\/code>, e <code>destroy<\/code>.<\/p>\n<h2>Creare le funzioni<\/h2>\n<p>Quindi, create le funzioni che memorizzano, indicizzano, aggiornano, distruggono, creano, mostrano e modificano i dati.<\/p>\n<p>Potete aggiungerle al file <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/app\/Http\/Controllers\/PostController.php\" target=\"_blank\" rel=\"noopener noreferrer\">app\/Http\/Controller\/PostController.php<\/a><\/strong> mostrato di seguito.<\/p>\n<h3>La funzione <code>store<\/code><\/h3>\n<p>La funzione <code>store<\/code> aggiunge un post al database.<\/p>\n<p>Scorrete fino alla funzione <code>store<\/code> e aggiungete il seguente codice all&#8217;interno delle parentesi graffe vuote:<\/p>\n<pre><code class=\"language-php\">$request-&gt;validate([\n  'title' =&gt; 'required|max:255',\n  'body' =&gt; 'required',\n]);\nPost::create($request-&gt;all());\nreturn redirect()-&gt;route('posts.index')\n  -&gt;with('success','Post created successfully.');<\/code><\/pre>\n<p>Questo codice prende un oggetto contenente il titolo e il corpo del post, convalida i dati, aggiunge un nuovo post al database se i dati sono validi e reindirizza l&#8217;utente alla homepage con un messaggio di successo.<\/p>\n<h3>La funzione <code>index<\/code><\/h3>\n<p>La funzione <code>index<\/code> recupera tutti i post dal database e invia i dati al file <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/index.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">posts.index<\/a><\/strong> della pagina posts.index.<\/p>\n<h3>La funzione <code>update<\/code><\/h3>\n<p>La funzione <code>update<\/code> contiene l\u2019<code>id<\/code> del post da aggiornare, il nuovo post <code>title<\/code> e il <code>body<\/code>. Dopo aver convalidato i dati, trovate il post con lo stesso <code>id<\/code>. Se lo trovate, la funzione <code>update<\/code> aggiorna il post nel database con i nuovi <code>title<\/code> e <code>body<\/code>. Quindi, reindirizzate l&#8217;utente alla homepage con un messaggio di successo.<\/p>\n<h3>La funzione <code>destroy<\/code><\/h3>\n<p>La funzione <code>destroy<\/code> trova un post con il dato <code>id<\/code> e lo cancella dal database, quindi reindirizza l&#8217;utente alla homepage con un messaggio di successo.<\/p>\n<p>Le funzioni di cui sopra sono le funzioni utilizzate per il CRUD dei post dal database. Tuttavia, dovete definire altre funzioni all&#8217;interno del controller per rendere le pagine necessarie in <strong>resources\/views\/posts\/<\/strong>.<\/p>\n<h3>La funzione <code>create<\/code><\/h3>\n<p>La funzione <code>create<\/code> rende la pagina <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/create.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">resources\/views\/posts\/create.blade.php<\/a><\/strong> che contiene il modulo per aggiungere i post al database.<\/p>\n<h3>La funzione <code>show<\/code><\/h3>\n<p>La funzione <code>show<\/code> trova nel database un post con il nome <code>id<\/code> indicato e visualizza la pagina <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/show.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">resources\/views\/posts\/show.blade.php<\/a><\/strong> con il post.<\/p>\n<h3>La funzione <code>edit<\/code><\/h3>\n<p>La funzione <code>edit<\/code> trova un post con il dato <code>id<\/code> nel database e visualizza il file <strong><a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\/blob\/main\/resources\/views\/posts\/edit.blade.php\" target=\"_blank\" rel=\"noopener noreferrer\">resources\/views\/posts\/edit.blade.php<\/a><\/strong> con i dettagli del post all&#8217;interno di un modulo.<\/p>\n<h2>Configurare il modello<\/h2>\n<p>Il modello <code>Post<\/code> interagisce con la tabella dei <strong>post<\/strong> del database.<\/p>\n<ol start=\"1\">\n<li>Per creare un modello con Artisan, eseguite:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:model Post<\/code><\/pre>\n<p>Questo codice crea un file <strong>Post.php<\/strong> all&#8217;interno della cartella <strong>App\/Models<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Create un array <code>&lt;fillable<\/code>. Aggiungete il seguente codice all&#8217;interno della classe <code>Post<\/code> e sotto la riga <code>use HasFactory;<\/code><\/li>\n<\/ol>\n<pre><code class=\"language-php\">protected $fillable = [\n  'title',\n  'body',\n];<\/code><\/pre>\n<p>Questo codice crea un array <code>fillable<\/code> che vi permette di aggiungere elementi al database dalla vostra applicazione Laravel.<\/p>\n<ol start=\"3\">\n<li>Collegate il modello <code>Post<\/code> al file <strong>PostController.php<\/strong>. Aprite <strong>PostController.php<\/strong> e aggiungete la riga sottostante sotto <code>use Illuminate\\<span id=\"urn:enhancement-0f54d2b2-07eb-4ab7-8654-f23822885003\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-cbb6b809-7fbe-4382-94df-efb3a7f5324f\" class=\"textannotation\">Request<\/span>;<\/code><code><\/code>. Il risultato \u00e8 il seguente:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use Illuminate\\<span id=\"urn:enhancement-971924ce-3c9f-41ff-80d7-95ea1b256a68\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-2d6bf5ec-6c5b-40c2-a7b1-feda0790f5a9\" class=\"textannotation\">Request<\/span>;\nuse <span id=\"urn:enhancement-0e3661ab-1bed-4a80-82f4-d66ebfa4ba52\" class=\"textannotation\">App<\/span>\\Models\\Post;<\/code><\/pre>\n<p>Il file <strong>PostController.php<\/strong> dovrebbe ora avere questo aspetto:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace <span id=\"urn:enhancement-77e80bd5-7c39-48b4-b8d9-332eb53895bb\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-dae9a699-4bf4-4c51-89e3-052c24c1c13b\" class=\"textannotation\">Http<\/span>\\Controllers;\nuse Illuminate\\<span id=\"urn:enhancement-64aee193-c36f-4a16-8dda-a555dc611788\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-c398a52b-3445-4d5e-bfa2-7f9120616343\" class=\"textannotation\">Request<\/span>;\nuse <span id=\"urn:enhancement-89ca8efc-2c37-46eb-81c8-4b3f752401aa\" class=\"textannotation\">App<\/span>\\Models\\Post;\nclass PostController extends Controller\n{\n  \/**\n   * Display a listing of the resource.\n   *\n   * @<span id=\"urn:enhancement-7da984ef-54e8-481f-9f3a-22547027bcd0\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-cb494ad0-9fd3-40c0-aaf9-9e99bf9fec24\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function index()\n  {\n\t$posts = Post::all();\n\treturn view('posts.index', compact('posts'));\n  }\n  \/**\n   * Store a newly created resource in storage.\n   *\n   * @param  \\Illuminate\\<span id=\"urn:enhancement-f3714598-a689-485b-a409-e40c2402ab88\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-14f57771-3230-480e-8925-af9ea919d776\" class=\"textannotation\">Request<\/span>  $request\n   * @<span id=\"urn:enhancement-c8e9f461-21cc-4de8-addc-daaab2807680\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-1eab4583-871c-4ce0-9073-7b6ed4216298\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function store(Request $request)\n  {\n\t$request-&gt;validate([\n  \t'title' =&gt; 'required|max:255',\n  \t'body' =&gt; 'required',\n\t]);\n\tPost::create($request-&gt;all());\n\treturn redirect()-&gt;route('posts.index')\n  \t-&gt;with('success', 'Post created successfully.');\n  }\n  \/**\n   * Update the specified resource in storage.\n   *\n   * @param  \\Illuminate\\<span id=\"urn:enhancement-dc41948b-d79e-47a8-b47c-73a7611e4b89\" class=\"textannotation\">Http<\/span>\\<span id=\"urn:enhancement-fcc08f10-838f-405b-8699-02daf0484720\" class=\"textannotation\">Request<\/span>  $request\n   * @param  int  $id\n   * @<span id=\"urn:enhancement-bbd971c8-6734-4b05-b4aa-34201cdab088\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-8a1a1693-d869-480d-82ac-4c1fb36e8a83\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function update(Request $request, $id)\n  {\n\t$request-&gt;validate([\n  \t'title' =&gt; 'required|max:255',\n  \t'body' =&gt; 'required',\n\t]);\n\t$post = Post::find($id);\n\t$post-&gt;update($request-&gt;all());\n\treturn redirect()-&gt;route('posts.index')\n  \t-&gt;with('success', 'Post updated successfully.');\n  }\n  \/**\n   * Remove the specified resource from storage.\n   *\n   * @param  int  $id\n   * @<span id=\"urn:enhancement-09afa087-6ac2-4b6d-a885-fddc09f42f44\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-4994b099-3400-47cf-978d-fd3f99218176\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function destroy($id)\n  {\n\t$post = Post::find($id);\n\t$post-&gt;delete();\n\treturn redirect()-&gt;route('posts.index')\n  \t-&gt;with('success', 'Post deleted successfully');\n  }\n  \/\/ routes functions\n  \/**\n   * Show the form for creating a new post.\n   *\n   * @<span id=\"urn:enhancement-82b189f9-ae50-4af2-88d9-1350e35d7b21\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-7919f28e-1dce-49be-845e-e29f348c0d7a\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function create()\n  {\n\treturn view('posts.create');\n  }\n  \/**\n   * Display the specified resource.\n   *\n   * @param  int  $id\n   * @<span id=\"urn:enhancement-b96ca812-536b-446c-8b4b-4f549b0cdec7\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-22be0184-8414-4917-9183-f71a37e3eb10\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function show($id)\n  {\n\t$post = Post::find($id);\n\treturn view('posts.show', compact('post'));\n  }\n  \/**\n   * Show the form for editing the specified post.\n   *\n   * @param  int  $id\n   * @<span id=\"urn:enhancement-2f74ccf8-3203-49ba-a9d2-ae983bd10d39\" class=\"textannotation\">return<\/span> \\Illuminate\\<span id=\"urn:enhancement-b09020d7-85ca-4d8b-81a1-079b2fccd050\" class=\"textannotation\">Http<\/span>\\Response\n   *\/\n  public function edit($id)\n  {\n\t$post = Post::find($id);\n\treturn view('posts.edit', compact('post'));\n  }\n}<\/code><\/pre>\n<h2>Aggiungere le route<\/h2>\n<p>Dopo aver creato le funzioni del controller e il modello <code>Post<\/code>, dovete aggiungere le route per le funzioni del controller.<\/p>\n<ol start=\"1\">\n<li>Aprite <strong>routes\/web.php<\/strong> e cancellate la route boilerplate generata dall&#8217;applicazione. Sostituitela con il codice seguente per collegare le funzioni del controller alle rispettive route:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ returns the home page with all posts\nRoute::get('\/', PostController::class .'@index')-&gt;name('posts.index');\n\/\/ returns the form for adding a post\nRoute::get('\/posts\/create', PostController::class . '@create')-&gt;name('posts.create');\n\/\/ adds a post to the database\nRoute::post('\/posts', PostController::class .'@store')-&gt;name('posts.store');\n\/\/ returns a page that shows a full post\nRoute::get('\/posts\/{post}', PostController::class .'@show')-&gt;name('posts.show');\n\/\/ returns the form for editing a post\nRoute::get('\/posts\/{post}\/edit', PostController::class .'@edit')-&gt;name('posts.edit');\n\/\/ updates a post\nRoute::put('\/posts\/{post}', PostController::class .'@update')-&gt;name('posts.update');\n\/\/ deletes a post\nRoute::delete('\/posts\/{post}', PostController::class .'@destroy')-&gt;name('posts.destroy');<\/code><\/pre>\n<ol start=\"2\">\n<li>Per collegare le route, aprite <strong>app\/Http\/Controllers\/PostController.php<\/strong> e aggiungete la riga sottostante sotto la linea <code>use Illuminate\\Support\\Facades\\Route;<\/code>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use Illuminate\\Support\\Facades\\Route;\nuse <span id=\"urn:enhancement-73bb7bbc-1a0b-49e9-ab01-f72aa49fbf34\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-ba4487e1-9a5d-4c53-9657-67aa343cabca\" class=\"textannotation\">Http<\/span>\\Controllers\\PostController;<\/code><\/pre>\n<p>Il file <strong>routes\/web.php<\/strong> dovrebbe ora avere questo aspetto:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse Illuminate\\Support\\Facades\\Route;\nuse <span id=\"urn:enhancement-97a6fc6a-f5db-409e-9ea1-1be57da8dd71\" class=\"textannotation\">App<\/span>\\<span id=\"urn:enhancement-21a8f1a1-9e96-4c64-83e8-640775521ec3\" class=\"textannotation\">Http<\/span>\\Controllers\\PostController;\n\/\/ returns the home page with all posts\nRoute::get('\/', PostController::class .'@index')-&gt;name('posts.index');\n\/\/ returns the form for adding a post\nRoute::get('\/posts\/create', PostController::class . '@create')-&gt;name('posts.create');\n\/\/ adds a post to the database\nRoute::post('\/posts', PostController::class .'@store')-&gt;name('posts.store');\n\/\/ returns a page that shows a full post\nRoute::get('\/posts\/{post}', PostController::class .'@show')-&gt;name('posts.show');\n\/\/ returns the form for editing a post\nRoute::get('\/posts\/{post}\/edit', PostController::class .'@edit')-&gt;name('posts.edit');\n\/\/ updates a post\nRoute::put('\/posts\/{post}', PostController::class .'@update')-&gt;name('posts.update');\n\/\/ deletes a post\nRoute::delete('\/posts\/{post}', PostController::class .'@destroy')-&gt;name('posts.destroy');<\/code><\/pre>\n<h2>Generare i file Blade<\/h2>\n<p>Ora che avete le route, potete creare i file <a href=\"https:\/\/kinsta.com\/it\/blog\/laravel-blade\/\">Laravel Blade<\/a>. Prima di usare Artisan per generare i file Blade, create il comando <code>make:view<\/code>, con il quale potrete generare i file <strong>blade.php<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Eseguite il seguente codice nella CLI per creare un file di comando <strong>MakeViewCommand<\/strong> all&#8217;interno della cartella <strong>app\/Console\/Commands <\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:command MakeViewCommand<\/code><\/pre>\n<ol start=\"2\">\n<li>Create un comando per generare i file <strong>.blade.php<\/strong> dalla CLI sostituendo il codice nel file <strong>MakeViewCommand<\/strong> con il seguente:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\nnamespace <span id=\"urn:enhancement-04d661b0-6a8f-499f-90eb-a8ecf62e3654\" class=\"textannotation\">App<\/span>\\Console\\Commands;\nuse Illuminate\\Console\\Command;\nuse File;\nclass MakeViewCommand extends Command\n{\n  \/**\n   * The name and signature of the console command.\n   *\n   * @var string\n   *\/\n  protected $signature = 'make:view {view}';\n  \/**\n   * The console command description.\n   *\n   * @var string\n   *\/\n  protected $description = 'Create a new blade template.';\n  \/**\n   * Execute the console command.\n   *\n   * @return mixed\n   *\/\n  public function handle()\n  {\n\t$view = $this-&gt;argument('view');\n\t$path = $this-&gt;viewPath($view);\n\t$this-&gt;createDir($path);\n\tif (File::exists($path))\n\t{\n    \t$this-&gt;error(\"File {$path} already exists!\");\n    \treturn;\n\t}\n\tFile::put($path, $path);\n\t$this-&gt;info(\"File {$path} created.\");\n  }\n  \/**\n   * Get the view full path.\n   *\n   * @param string $view\n   *\n   * @return string\n   *\/\n  public function viewPath($view)\n  {\n\t$view = str_replace('.', '\/', $view) . '.blade.php';\n\t$path = \"resources\/views\/{$view}\";\n\treturn $path;\n  }\n  \/**\n   * Create a view directory if it does not exist.\n   *\n   * @param $path\n   *\/\n  public function createDir($path)\n  {\n\t$dir = dirname($path);\n\tif (!file_exists($dir))\n\t{\n    \tmkdir($dir, 0777, true);\n\t}\n  }\n}<\/code><\/pre>\n<h3>Creare una homepage<\/h3>\n<p>Successivamente, create la homepage. La homepage \u00e8 il file <strong>index.blade.php<\/strong>, che elenca tutti i post.<\/p>\n<ol start=\"1\">\n<li>Per creare la homepage, eseguite:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.index<\/code><\/pre>\n<p>Questo crea una cartella <strong>posts<\/strong> all&#8217;interno della cartella <strong>\/resources\/views<\/strong> e un file <strong>index.blade.php<\/strong> sotto di essa. Il percorso risultante \u00e8 <strong>\/resources\/views\/posts\/index.blade.php<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Aggiungete il seguente codice all&#8217;interno del file <strong>index.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;!DOCTYPE html&gt;\n&lt;html lang=\"en\"&gt;\n&lt;head&gt;\n  &lt;meta charset=\"UTF-8\"&gt;\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"&gt;\n  &lt;meta http-equiv=\"X-UA-Compatible\" content=\"ie=edge\"&gt;\n  &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/bootstrap@5.3.0-alpha1\/dist\/css\/bootstrap.min.css\" rel=\"stylesheet\"\nintegrity=\"sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3\/Jr59b6EGGoI1aFkw7cmDA6j6gD\" crossorigin=\"anonymous\"&gt;\n  &lt;title&gt;Posts&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n  &lt;nav class=\"navbar navbar-expand-lg navbar-light bg-warning\"&gt;\n\t&lt;div class=\"container-fluid\"&gt;\n  \t&lt;a class=\"navbar-brand h1\" href={{ route('posts.index') }}&gt;CRUDPosts&lt;\/a&gt;\n  \t&lt;div class=\"justify-end \"&gt;\n    \t&lt;div class=\"col \"&gt;\n      \t&lt;a class=\"btn btn-sm btn-success\" href={{ route('posts.create') }}&gt;Add Post&lt;\/a&gt;\n    \t&lt;\/div&gt;\n  \t&lt;\/div&gt;\n\t&lt;\/div&gt;\n  &lt;\/nav&gt;\n  &lt;div class=\"container mt-5\"&gt;\n\t&lt;div class=\"row\"&gt;\n  \t@foreach ($posts as $post)\n    \t&lt;div class=\"col-sm\"&gt;\n      \t&lt;div class=\"card\"&gt;\n        \t&lt;div class=\"card-header\"&gt;\n          \t&lt;h5 class=\"card-title\"&gt;{{ $post-&gt;title }}&lt;\/h5&gt;\n        \t&lt;\/div&gt;\n        \t&lt;div class=\"card-body\"&gt;\n          \t&lt;p class=\"card-text\"&gt;{{ $post-&gt;body }}&lt;\/p&gt;\n        \t&lt;\/div&gt;\n        \t&lt;div class=\"card-footer\"&gt;\n          \t&lt;div class=\"row\"&gt;\n            \t&lt;div class=\"col-sm\"&gt;\n              \t&lt;a href=\"{{ route('posts.edit', $post-&gt;id) }}\"\n        \tclass=\"btn btn-primary btn-sm\"&gt;Edit&lt;\/a&gt;\n            \t&lt;\/div&gt;\n            \t&lt;div class=\"col-sm\"&gt;\n                \t&lt;form action=\"{{ route('posts.destroy', $post-&gt;id) }}\" method=\"post\"&gt;\n                  \t@csrf\n                  \t@method('DELETE')\n                  \t&lt;button type=\"submit\" class=\"btn btn-danger btn-sm\"&gt;Delete&lt;\/button&gt;\n                \t&lt;\/form&gt;\n            \t&lt;\/div&gt;\n          \t&lt;\/div&gt;\n        \t&lt;\/div&gt;\n      \t&lt;\/div&gt;\n    \t&lt;\/div&gt;\n  \t@endforeach\n\t&lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>Il codice qui sopra crea una semplice pagina HTML che si serve di <a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap<\/a> per lo styling. Crea una barra di navigazione e un modello a griglia che elenca tutti i post del database con i dettagli e due pulsanti di azione &#8211; modifica e cancellazione &#8211; utilizzando l&#8217;helper <code>@foreach<\/code> Blade.<\/p>\n<p>Il pulsante <strong>Edit<\/strong> porta l&#8217;utente alla pagina <strong>Edit post<\/strong>, dove pu\u00f2 modificare il post. Il pulsante <strong>Delete<\/strong> elimina il post dal database utilizzando <code>{{ route('posts.destroy', $post-&gt;id) }}<\/code> con un metodo <code>DELETE<\/code>.<\/p>\n<p><strong>Nota<\/strong>: il codice della navbar per tutti i file \u00e8 lo stesso del file precedente.<\/p>\n<ol start=\"3\">\n<li>Create la pagina <strong>create.blade.php<\/strong>. Il file Blade chiamato <strong>create<\/strong> aggiunge post al database. Usate il seguente comando per generare il file:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.create<\/code><\/pre>\n<p>Questo genera un file <strong>create.blade.php<\/strong> all&#8217;interno della cartella<strong> \/resources\/views\/posts <\/strong>.<\/p>\n<ol start=\"4\">\n<li>Aggiungete il seguente codice al file <strong>create.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">\/\/ same as the previous file. Add the following after the nav tag and before the closing body tag.\n&lt;div class=\"container h-100 mt-5\"&gt;\n  &lt;div class=\"row h-100 justify-content-center align-items-center\"&gt;\n\t&lt;div class=\"col-10 col-md-8 col-lg-6\"&gt;\n  \t&lt;h3&gt;Add a Post&lt;\/h3&gt;\n  \t&lt;form action=\"{{ route('posts.store') }}\" method=\"post\"&gt;\n    \t@csrf\n    \t&lt;div class=\"form-group\"&gt;\n      \t&lt;label for=\"title\"&gt;Title&lt;\/label&gt;\n      \t&lt;input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\" required&gt;\n    \t&lt;\/div&gt;\n    \t&lt;div class=\"form-group\"&gt;\n      \t&lt;label for=\"body\"&gt;Body&lt;\/label&gt;\n      \t&lt;textarea class=\"form-control\" id=\"body\" name=\"body\" rows=\"3\" required&gt;&lt;\/textarea&gt;\n    \t&lt;\/div&gt;\n    \t&lt;br&gt;\n    \t&lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Create Post&lt;\/button&gt;\n  \t&lt;\/form&gt;\n\t&lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>Il codice qui sopra crea un modulo con i campi <code>title<\/code> e <code>body<\/code> e un pulsante <code>submit<\/code> per aggiungere un post al database attraverso l&#8217;azione <code>{{ route('posts.store') }}<\/code> con un metodo <code>POST<\/code>.<\/p>\n<ol start=\"5\">\n<li>Create la pagina <strong>Edit post<\/strong> per modificare i post nel database. Usate il seguente comando per generare il file:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.edit<\/code><\/pre>\n<p>Questo crea un file <strong>edit.blade.php<\/strong> all&#8217;interno della cartella <strong>\/resources\/views\/posts<\/strong>.<\/p>\n<ol start=\"6\">\n<li>Aggiungete il seguente codice al file <strong>edit.blade.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;div class=\"container h-100 mt-5\"&gt;\n  &lt;div class=\"row h-100 justify-content-center align-items-center\"&gt;\n\t&lt;div class=\"col-10 col-md-8 col-lg-6\"&gt;\n  \t&lt;h3&gt;Update Post&lt;\/h3&gt;\n  \t&lt;form action=\"{{ route('posts.update', $post-&gt;id) }}\" method=\"post\"&gt;\n    \t@csrf\n    \t@method('PUT')\n    \t&lt;div class=\"form-group\"&gt;\n      \t&lt;label for=\"title\"&gt;Title&lt;\/label&gt;\n      \t&lt;input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\"\n        \tvalue=\"{{ $post-&gt;title }}\" required&gt;\n    \t&lt;\/div&gt;\n    \t&lt;div class=\"form-group\"&gt;\n      \t&lt;label for=\"body\"&gt;Body&lt;\/label&gt;\n      \t&lt;textarea class=\"form-control\" id=\"body\" name=\"body\" rows=\"3\" required&gt;{{ $post-&gt;body }}&lt;\/textarea&gt;\n    \t&lt;\/div&gt;\n    \t&lt;button type=\"submit\" class=\"btn mt-3 btn-primary\"&gt;Update Post&lt;\/button&gt;\n  \t&lt;\/form&gt;\n    &lt;\/<span id=\"urn:enhancement-91fdbb5c-9fb5-4506-bf5c-fbca05df1630\" class=\"textannotation\">div<\/span>&gt;\n  &lt;\/<span id=\"urn:enhancement-6e8e5b3e-b417-4ad3-b8bb-8fd9114c0e9d\" class=\"textannotation\">div<\/span>&gt;\n&lt;\/<span id=\"urn:enhancement-1fc6c40f-7215-4381-8839-fea7429bce69\" class=\"textannotation\">div<\/span>&gt;\n<\/code><\/pre>\n<p>Il codice qui sopra crea un modulo con i campi <code>title<\/code> e <code>body<\/code> e un pulsante di invio per modificare un post con il nome <code>id<\/code> specificato nel database attraverso l&#8217;azione <code>{{ route('posts.update') }}<\/code> con un metodo <code>PUT<\/code>.<\/p>\n<ol start=\"7\">\n<li>Quindi riavviate il server dell&#8217;applicazione usando il codice seguente:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan serve<\/code><\/pre>\n<p>Visitate <code>http:\/\/127.0.0.1:8000<\/code> sul browser per visualizzare il nuovo blog. Fate clic sul pulsante <strong>Add post<\/strong> per aggiungere nuovi post.<\/p>\n<h2>Distribuire e testare l&#8217;applicazione CRUD<\/h2>\n<p>Preparate la vostra applicazione per la distribuzione come segue.<\/p>\n<ol start=\"1\">\n<li>Semplificate il deploy e rendetelo immediato dichiarando la cartella pubblica. Aggiungete un file <strong>.htaccess<\/strong> alla radice della cartella dell&#8217;applicazione con il seguente codice:<\/li>\n<\/ol>\n<pre><code class=\"language-apacheconf\">&lt;IfModule mod_rewrite.c &gt;\n  RewriteEngine On\n  RewriteRule ^(.*)$ public\/$1 [L]\n&lt;\/IfModule &gt;<\/code><\/pre>\n<ol start=\"2\">\n<li>Forzate l\u2019applicazione a usare <code>HTTPS<\/code> aggiungendo il seguente codice sopra i vostri percorsi all&#8217;interno del file <strong>routes\/web.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use Illuminate\\Support\\Facades\\<span id=\"urn:enhancement-396d40cc-daf0-4a39-961e-5ac2daa0874e\" class=\"textannotation\">URL<\/span>;\n<span id=\"urn:enhancement-20347227-582d-49d9-ac91-5a27de34d7e2\" class=\"textannotation\">URL<\/span>::forceScheme('https');<\/code><\/pre>\n<ol start=\"3\">\n<li>Inviate il vostro codice a un repository Git. Kinsta supporta le distribuzioni da GitHub, GitLab o Bitbucket.<\/li>\n<\/ol>\n<h3>Creare un progetto su MyKinsta<\/h3>\n<ol start=\"1\">\n<li>Create un account <a href=\"https:\/\/kinsta.com\/it\/mykinsta\/\">MyKinsta<\/a> se non ne avete gi\u00e0 uno.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Accedete al vostro account e fate clic sul pulsante <strong>Aggiungi servizio<\/strong> nella dashboard per creare una nuova applicazione.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Se l&#8217;applicazione \u00e8 nuova, collegatevi al vostro account GitHub, GitLab o Bitbucket e fornite le autorizzazioni specifiche.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Compilate il modulo e aggiungete <code>APP_KEY<\/code>. Potete trovare il valore corrispondente nel vostro file <strong>.env<\/strong>.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Selezionate le risorse di build e scegliete se usare il percorso di build della vostra applicazione o se compilare l&#8217;applicazione con Dockerfile. Per questa dimostrazione, lasciate che MyKinsta costruisca l&#8217;applicazione sulla base del vostro repository.<\/li>\n<\/ol>\n<ol start=\"6\">\n<li>Specificate i diversi processi che volete eseguire durante la distribuzione. A questo punto potete lasciarlo vuoto.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Infine, aggiungete il metodo di pagamento.<\/li>\n<\/ol>\n<p>Dopo aver confermato il metodo di pagamento, MyKinsta distribuisce la vostra applicazione e vi assegna un URL come mostrato di seguito:<\/p>\n<figure style=\"width: 492px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-mykinsta-deployment-process.png\" alt=\"Distribuzione avvenuta correttamente con MyKinsta\" width=\"492\" height=\"618\"><figcaption class=\"wp-caption-text\">Distribuzione riuscita.<\/figcaption><\/figure>\n<p>Potete visitare il link, ma vi appare una pagina <code>500 | Server Error<\/code> perch\u00e9 l&#8217;applicazione ha bisogno di una connessione al database valida per funzionare. La sezione seguente risolve questo problema.<\/p>\n<h3>Creare un database tramite MyKinsta<\/h3>\n<ol start=\"1\">\n<li>Per creare un database, accedete alla dashboard di MyKinsta e fate clic su <strong>Aggiungi servizio<\/strong>.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Selezionate <strong>Database<\/strong> e completate il modulo con il nome, il tipo, il nome utente e la password del database che preferite. Aggiungete la posizione del centro dati e la dimensione del database adatta alla vostra applicazione.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>La pagina successiva mostra il riepilogo dei costi e il metodo di pagamento. Fate clic su <strong>Crea database<\/strong> per completare la procedura.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Dopo aver creato il database, MyKinsta vi reindirizza all&#8217;elenco dei servizi. Fate clic sul database appena creato e scorrete verso il basso fino a <strong>Connessioni esterne<\/strong>. Copiate le credenziali del database.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Tornate alla pagina di <strong>distribuzione<\/strong> dell&#8217;applicazione e fate clic su <strong>Impostazioni<\/strong>. Quindi, scorrete fino a <strong>Variabili d&#8217;ambiente<\/strong> e fate clic su <strong>Aggiungi variabili d&#8217;ambiente<\/strong>. Aggiungete le credenziali del database come variabili d&#8217;ambiente nel seguente ordine:<\/li>\n<\/ol>\n<pre><code class=\"language-env\">DB_CONNECTION=mysql\nDB_HOST=External hostname\nDB_PORT=External port\nDB_DATABASE=Database name\nDB_USERNAME=Username\nDB_PASSWORD=Password<\/code><\/pre>\n<p>L&#8217;elenco delle variabili d&#8217;ambiente dell&#8217;applicazione dovrebbe ora apparire come segue:<\/p>\n<figure style=\"width: 561px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2023\/07\/laravel-crud-env-variables-kinsta.png\" alt=\"L\u2019elenco delle variabili .env \" width=\"561\" height=\"629\"><figcaption class=\"wp-caption-text\">L&#8217;elenco delle variabili .env.<\/figcaption><\/figure>\n<ol start=\"6\">\n<li>Andate alla pagina <strong>Distribuzioni<\/strong> della vostra applicazione e distribuite manualmente l\u2019applicazione facendo clic su <strong>Distribuisci ora<\/strong> per applicare queste modifiche. Finora avete creato un database e lo avete collegato alla vostra applicazione.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Infine, per creare le tabelle del database di MyKinsta, connettete il database alla vostra applicazione locale aggiornando il file <strong>.env<\/strong> con le stesse credenziali che avete inserito nell&#8217;applicazione di MyKinsta. Eseguite il seguente comando:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan migrate<\/code><\/pre>\n<p>Questo comando esegue tutti i file di migrazione. Crea tutte le tabelle definite nella vostra applicazione MyKinsta.<\/p>\n<p>Ora potete testare l\u2019applicazione con l&#8217;URL assegnato dopo la prima distribuzione.<\/p>\n<h2>Riepilogo<\/h2>\n<p>Laravel \u00e8 un framework completo per creare applicazioni web robuste e scalabili che richiedono funzionalit\u00e0 CRUD. Grazie alla sua sintassi intuitiva e alle sue potenti funzionalit\u00e0, Laravel permette di integrare facilmente le operazioni CRUD nelle vostre applicazioni.<\/p>\n<p>In questo articolo abbiamo visto i concetti fondamentali delle operazioni CRUD e come implementarle utilizzando le funzionalit\u00e0 integrate di Laravel. Inoltre abbiamo spiegato:<\/p>\n<ul>\n<li>Come creare un database in MyKinsta e collegarlo alla vostra applicazione<\/li>\n<li>Come usare le migrazioni di Laravel per definire la tabella del database, creare il file del controller e le sue funzioni<\/li>\n<li>Definire un modello e collegarlo al controller. Il routing di Laravel genera i file Blade per creare le pagine e i moduli corrispondenti e per distribuire e testare l&#8217;applicazione utilizzando MyKinsta<\/li>\n<\/ul>\n<p>Ora che avete visto quanto \u00e8 facile eseguire operazioni CRUD in Laravel, <a href=\"https:\/\/my.kinsta.com\/login?lang=it\">date un&#8217;occhiata a MyKinsta<\/a> per lo sviluppo e l&#8217;<a href=\"https:\/\/sevalla.com\/application-hosting\/\">hosting<\/a> di applicazioni web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laravel \u00e8 un framework PHP molto popolare per la creazione di applicazioni web moderne e dinamiche nel panorama dello sviluppo web odierno, in continua e rapida &#8230;<\/p>\n","protected":false},"author":290,"featured_media":72395,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[26020],"class_list":["post-72394","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel<\/title>\n<meta name=\"description\" content=\"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel\" \/>\n<meta property=\"og:description\" content=\"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstaitalia\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-08-17T08:56:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-21T08:00:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"6084\" \/>\n\t<meta property=\"og:image:height\" content=\"3042\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marcia Ramos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_IT\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel\",\"datePublished\":\"2023-08-17T08:56:27+00:00\",\"dateModified\":\"2023-08-21T08:00:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\"},\"wordCount\":2192,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg\",\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\",\"name\":\"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/it\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg\",\"datePublished\":\"2023-08-17T08:56:27+00:00\",\"dateModified\":\"2023-08-21T08:00:29+00:00\",\"description\":\"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg\",\"width\":6084,\"height\":3042},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/it\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/it\/argomenti\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/it\/#website\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluzioni di hosting premium, veloci e sicure\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/it\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/it\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/it\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/it\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstaitalia\/\",\"https:\/\/x.com\/Kinsta_IT\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g\",\"caption\":\"Marcia Ramos\"},\"description\":\"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/marciadiasramos\/\"],\"honorificSuffix\":\"B.Sc.\",\"gender\":\"Female\",\"knowsLanguage\":[\"English\",\"Portuguese\"],\"jobTitle\":\"Editorial Team Lead\",\"worksFor\":\"Kinsta Inc.\",\"url\":\"https:\/\/kinsta.com\/it\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel","description":"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/","og_locale":"it_IT","og_type":"article","og_title":"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel","og_description":"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.","og_url":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstaitalia\/","article_published_time":"2023-08-17T08:56:27+00:00","article_modified_time":"2023-08-21T08:00:29+00:00","og_image":[{"width":6084,"height":3042,"url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.","twitter_image":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg","twitter_creator":"@Kinsta_IT","twitter_site":"@Kinsta_IT","twitter_misc":{"Scritto da":"Marcia Ramos","Tempo di lettura stimato":"15 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel","datePublished":"2023-08-17T08:56:27+00:00","dateModified":"2023-08-21T08:00:29+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/"},"wordCount":2192,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg","inLanguage":"it-IT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/","url":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/","name":"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg","datePublished":"2023-08-17T08:56:27+00:00","dateModified":"2023-08-21T08:00:29+00:00","description":"Le operazioni CRUD sono alla base di qualsiasi app basata su database. Scopri come eseguire le operazioni CRUD (Create, Read, Update e Delete) con Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/it\/blog\/laravel-crud\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#primaryimage","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/08\/laravel-crud.jpg","width":6084,"height":3042},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/it\/blog\/laravel-crud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/it\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/it\/argomenti\/laravel\/"},{"@type":"ListItem","position":3,"name":"Come eseguire operazioni CRUD (Create, Read, Update, Delete) con Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/it\/#website","url":"https:\/\/kinsta.com\/it\/","name":"Kinsta\u00ae","description":"Soluzioni di hosting premium, veloci e sicure","publisher":{"@id":"https:\/\/kinsta.com\/it\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/it\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/it\/","logo":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/it\/wp-content\/uploads\/sites\/2\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/it\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstaitalia\/","https:\/\/x.com\/Kinsta_IT","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/kinsta.com\/it\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0d680db24858fdf61a7e7ce3c1a160f5?s=96&d=mm&r=g","caption":"Marcia Ramos"},"description":"I'm the Editorial Team Lead at Kinsta. I'm a open source enthusiast and I love coding. With more than 10 years of technical writing and editing for the tech industry, I love collaborating with people to create clear and concise pieces of content and improve workflows.","sameAs":["https:\/\/www.linkedin.com\/in\/marciadiasramos\/"],"honorificSuffix":"B.Sc.","gender":"Female","knowsLanguage":["English","Portuguese"],"jobTitle":"Editorial Team Lead","worksFor":"Kinsta Inc.","url":"https:\/\/kinsta.com\/it\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72394","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/comments?post=72394"}],"version-history":[{"count":13,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72394\/revisions"}],"predecessor-version":[{"id":72447,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/posts\/72394\/revisions\/72447"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/translations\/es"},{"href":"https:\/\/kinsta.com\/it\/wp-json\/kinsta\/v1\/posts\/72394\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media\/72395"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/media?parent=72394"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/tags?post=72394"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/it\/wp-json\/wp\/v2\/topic?post=72394"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}