{"id":62227,"date":"2023-12-04T05:58:27","date_gmt":"2023-12-04T08:58:27","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=62227&#038;preview=true&#038;preview_id=62227"},"modified":"2023-12-06T08:37:50","modified_gmt":"2023-12-06T11:37:50","slug":"laravel-crud","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/","title":{"rendered":"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel"},"content":{"rendered":"<p>O <a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> \u00e9 um <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-laravel\/\">framework PHP<\/a> popular para a cria\u00e7\u00e3o de aplicativos web modernos e din\u00e2micos no atual cen\u00e1rio de constante evolu\u00e7\u00e3o e ritmo acelerado de desenvolvimento web. Um de seus principais recursos \u00e9 o <a href=\"https:\/\/laravel.com\/docs\/10.x\/eloquent\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel Eloquent<\/a>, um <a href=\"https:\/\/en.wikipedia.org\/wiki\/Object%E2%80%93relational_mapping\" target=\"_blank\" rel=\"noopener noreferrer\">mapeador objeto-relacional<\/a> (ORM) que permite que os desenvolvedores executem com efici\u00eancia opera\u00e7\u00f5es de cria\u00e7\u00e3o, leitura, atualiza\u00e7\u00e3o e exclus\u00e3o \u2014 CRUD <em>(Create, Read, Update, Delete)<\/em> \u2014 em um banco de dados.<\/p>\n<p>Este tutorial demonstra como voc\u00ea pode executar essas opera\u00e7\u00f5es em seu aplicativo Laravel usando o Eloquent ORM do Laravel, e como implementar seu aplicativo CRUD do Laravel usando o <a href=\"https:\/\/kinsta.com\/pt\/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>Funcionalidade CRUD no Laravel<\/h2>\n<p>As opera\u00e7\u00f5es CRUD s\u00e3o a espinha dorsal de qualquer aplicativo voltado a banco de dados. Elas permitem que voc\u00ea execute as opera\u00e7\u00f5es mais b\u00e1sicas e essenciais do banco de dados, como a cria\u00e7\u00e3o de novos registros, e a leitura, atualiza\u00e7\u00e3o e exclus\u00e3o dos existentes. Essas opera\u00e7\u00f5es s\u00e3o cruciais para a funcionalidade de qualquer <a href=\"https:\/\/docs.sevalla.com\/templates\/overview#laravel\">aplicativo Laravel<\/a> que interaja com um banco de dados.<\/p>\n<p>O Eloquent oferece uma maneira simples e intuitiva de interagir com o banco de dados, diminuindo as complexidades do gerenciamento do banco de dados para que voc\u00ea possa se concentrar na cria\u00e7\u00e3o do seu aplicativo. Seus m\u00e9todos e classes integrados permitem que voc\u00ea fa\u00e7a CRUD de registros no banco de dados com facilidade.<\/p>\n<h3>Pr\u00e9-requisitos<\/h3>\n<p>Para seguir este tutorial, certifique-se de que voc\u00ea tenha o seguinte:<\/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=pt\">Uma conta MyKinsta<\/a><\/li>\n<li>Uma conta no <a href=\"https:\/\/github.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitHub<\/a>, <a href=\"https:\/\/gitlab.com\" target=\"_blank\" rel=\"noopener noreferrer\">GitLab<\/a> ou <a href=\"https:\/\/bitbucket.org\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bitbucket<\/a> para enviar seu c\u00f3digo<\/li>\n<li><a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Vers\u00e3o 5 do Bootstrap<\/a><\/li>\n<\/ul>\n<h3>Etapas<\/h3>\n<ol start=\"1\">\n<li>Instale o Laravel e crie um novo aplicativo<\/li>\n<li>Crie um banco de dados<\/li>\n<li>Crie uma tabela<\/li>\n<li>Crie um controlador<\/li>\n<li>Configure o template<\/li>\n<li>Adicione uma rota<\/li>\n<li>Gere arquivos Blade<\/li>\n<li>Implemente e teste seu aplicativo CRUD<\/li>\n<\/ol>\n<p>Para se orientar ao longo do processo, confira o <a href=\"https:\/\/github.com\/VirtuaCreative\/kinsta-laravel-crud\" target=\"_blank\" rel=\"noopener noreferrer\">c\u00f3digo completo<\/a> do tutorial.<\/p>\n<h2>Instale o Laravel e crie um novo aplicativo<\/h2>\n<p>Abra o terminal onde voc\u00ea deseja criar o aplicativo Laravel e siga as etapas abaixo.<\/p>\n<ol start=\"1\">\n<li>Para instalar o Laravel, execute:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">composer global require laravel\/installer<\/code><\/pre>\n<ol start=\"2\">\n<li>Para criar um novo aplicativo Laravel, execute:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">laravel new crudposts<\/code><\/pre>\n<h2>Crie um banco de dados<\/h2>\n<p>Para criar um novo banco de dados para o seu aplicativo:<\/p>\n<ol start=\"1\">\n<li>Inicie os servidores Apache e MySQL no painel de controle do XAMPP e acesse <code>http:\/\/localhost\/phpmyadmin<\/code> em seu navegador.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Clique em <strong>New <\/strong>(Novo) na barra lateral esquerda. Voc\u00ea dever\u00e1 ver o seguinte:<\/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=\"O formul\u00e1rio de cria\u00e7\u00e3o do banco de dados.\" width=\"1134\" height=\"315\"><figcaption class=\"wp-caption-text\">O formul\u00e1rio de cria\u00e7\u00e3o do banco de dados.<\/figcaption><\/figure>\n<ol start=\"3\">\n<li>Adicione o nome do banco de dados e clique em <strong>Create<\/strong>.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Edite o arquivo <strong>.env<\/strong> do seu aplicativo na raiz do aplicativo Laravel. Ele cont\u00e9m todas as vari\u00e1veis de ambiente usadas pelo aplicativo. Localize as vari\u00e1veis prefixadas com <code>DB_<\/code> e edite-as com suas credenciais do banco de dados:<\/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>Crie uma tabela<\/h2>\n<p>As linhas de dados em seu aplicativo s\u00e3o armazenadas em tabelas. Voc\u00ea precisa de apenas uma tabela para este aplicativo, criada usando as <a href=\"https:\/\/laravel.com\/docs\/10.x\/migrations\" target=\"_blank\" rel=\"noopener noreferrer\">migra\u00e7\u00f5es do Laravel<\/a>.<\/p>\n<ol start=\"1\">\n<li>Para criar uma tabela e gerar um arquivo de migra\u00e7\u00e3o usando a interface de linha de comando do Laravel, Artisan, execute:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:migration create_posts_table<\/code><\/pre>\n<p>O comando acima cria um novo arquivo,<\/p>\n<p><strong>yyyy_mm_dd_hhmmss_create_posts_table.php<\/strong>, em <strong>database\/migrations<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Abra o arquivo <strong>yyyy_mm_dd_hhmmss_create_posts_table.php<\/strong> para definir as colunas que voc\u00ea deseja em sua tabela de banco de dados na fun\u00e7\u00e3o up:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">public function up()\n{\n  Schema::create('posts', function (Blueprint $table) {\n    $table-&gt;id();\n    $table-&gt;string('title');\n    $table-&gt;text('body');\n    $table-&gt;timestamps();\n  });\n}<\/code><\/pre>\n<p>Esse c\u00f3digo define o que a tabela de posts cont\u00e9m. Ela tem quatro colunas: <code>id<\/code>, <code>title<\/code>, <code>body<\/code>, e <code>timestamps<\/code>.<\/p>\n<ol start=\"3\">\n<li>Execute os arquivos de migra\u00e7\u00e3o na pasta <strong>database\/migrations<\/strong> para criar tabelas no banco de dados:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan migrate<\/code><\/pre>\n<p>O resultado \u00e9 semelhante a este:<\/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=\"Executando as migra\u00e7\u00f5es.\" width=\"614\" height=\"403\"><figcaption class=\"wp-caption-text\">Executando as migra\u00e7\u00f5es.<\/figcaption><\/figure>\n<ol start=\"4\">\n<li>V\u00e1 ao banco de dados que voc\u00ea criou anteriormente para confirmar que criou as tabelas:<\/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=\"Tabelas criadas.\" width=\"1053\" height=\"209\"><figcaption class=\"wp-caption-text\">Tabelas criadas.<\/figcaption><\/figure>\n<h2>Crie um controlador<\/h2>\n<p>O controlador cont\u00e9m todas as fun\u00e7\u00f5es para executar as opera\u00e7\u00f5es CRUD no banco de dados.<\/p>\n<p>Gere um arquivo controlador dentro do seu aplicativo Laravel usando o Artisan:<\/p>\n<pre><code class=\"language-sh\">php artisan make:controller PostController --api<\/code><\/pre>\n<p>A execu\u00e7\u00e3o desse comando cria um arquivo<strong> PostController.php<\/strong> em <strong>app\/Http\/Controllers<\/strong>, com c\u00f3digo padr\u00e3o e declara\u00e7\u00f5es de fun\u00e7\u00e3o vazias <code>index<\/code>, <code>store<\/code>, <code>show<\/code>, <code>update<\/code>, e <code>destroy<\/code>.<\/p>\n<h2>Criando fun\u00e7\u00f5es<\/h2>\n<p>Em seguida, crie as fun\u00e7\u00f5es que armazenam, indexam, atualizam, destroem, criam, mostram e editam os dados.<\/p>\n<p>Voc\u00ea pode adicion\u00e1-las ao arquivo <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> mostrado abaixo.<\/p>\n<h3>A fun\u00e7\u00e3o <code>store<\/code><\/h3>\n<p>A fun\u00e7\u00e3o <code>store<\/code> adiciona um post ao banco de dados.<\/p>\n<p>Role at\u00e9 a fun\u00e7\u00e3o <code>store<\/code> e adicione o seguinte c\u00f3digo dentro das chaves vazias:<\/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>Esse c\u00f3digo recebe um objeto que cont\u00e9m o t\u00edtulo e o corpo do post, valida os dados, adiciona um novo post ao banco de dados se os dados forem v\u00e1lidos, e redireciona o usu\u00e1rio para a p\u00e1gina inicial com uma mensagem de sucesso.<\/p>\n<h3>A fun\u00e7\u00e3o <code>index<\/code><\/h3>\n<p>A fun\u00e7\u00e3o <code>index<\/code> pesquisa todos os posts do banco de dados e envia os dados para a p\u00e1gina <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>.<\/p>\n<h3>A fun\u00e7\u00e3o <code>update<\/code><\/h3>\n<p>A fun\u00e7\u00e3o &lt;<code>update<\/code> cont\u00e9m o <code>id<\/code> do post a ser atualizado, o novo <code>title<\/code> do post, e o <code>body<\/code>. Depois de validar os dados, ela procura o post com o mesmo <code>id<\/code>. Se o encontrar, a fun\u00e7\u00e3o <code>update<\/code> atualiza o post no banco de dados com os novos <code>title<\/code> e <code>body<\/code>. Em seguida redireciona o usu\u00e1rio \u00e0 p\u00e1gina inicial com uma mensagem de sucesso.<\/p>\n<h3>A fun\u00e7\u00e3o <code>destroy<\/code><\/h3>\n<p>A fun\u00e7\u00e3o <code>destroy<\/code> localiza um post com o endere\u00e7o <code>id<\/code> fornecido e o exclui do banco de dados. Da\u00ed redireciona o usu\u00e1rio \u00e0 p\u00e1gina inicial com uma mensagem de sucesso.<\/p>\n<p>As fun\u00e7\u00f5es acima s\u00e3o as usadas para executar as opera\u00e7\u00f5es CRUD no banco de dados. No entanto, voc\u00ea deve definir mais fun\u00e7\u00f5es dentro do controlador para renderizar as p\u00e1ginas necess\u00e1rias em <strong>resources\/views\/posts\/<\/strong>.<\/p>\n<h3>A fun\u00e7\u00e3o <code>create<\/code><\/h3>\n<p>A fun\u00e7\u00e3o <code>create<\/code> renderiza a p\u00e1gina <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>, que cont\u00e9m o formul\u00e1rio para adicionar posts ao banco de dados.<\/p>\n<h3>A fun\u00e7\u00e3o <code>show<\/code><\/h3>\n<p>A fun\u00e7\u00e3o <code>show<\/code> localiza um post com o endere\u00e7o <code>id<\/code> fornecido no banco de dados e renderiza a p\u00e1gina <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> com o post.<\/p>\n<h3>A fun\u00e7\u00e3o <code>edit<\/code><\/h3>\n<p>A fun\u00e7\u00e3o <code>edit<\/code> localiza um post com o endere\u00e7o <code>id<\/code> fornecido no banco de dados e renderiza a p\u00e1gina <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> com os detalhes do post em um formul\u00e1rio.<\/p>\n<h2>Configure o modelo<\/h2>\n<p>O modelo <code>Post<\/code> interage com a tabela de <strong>posts<\/strong> no banco de dados.<\/p>\n<ol start=\"1\">\n<li>Para criar um modelo com o Artisan, execute:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:model Post<\/code><\/pre>\n<p>Esse c\u00f3digo cria um arquivo <strong>Post.php<\/strong> dentro da pasta <strong>App\/Models<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Crie um array <code>&lt;fillable<\/code>. Adicione o seguinte c\u00f3digo dentro da classe <code>Post<\/code>, abaixo da linha <code>use HasFactory;<\/code> :<\/li>\n<\/ol>\n<pre><code class=\"language-php\">protected $fillable = [\n  'title',\n  'body',\n];<\/code><\/pre>\n<p>Esse c\u00f3digo cria um array <code>fillable<\/code> que permite que voc\u00ea adicione itens ao banco de dados no seu aplicativo Laravel.<\/p>\n<ol start=\"3\">\n<li>Conecte o modelo <code>Post<\/code> ao arquivo <strong>PostController.php<\/strong>. Abra <strong>o PostController.php<\/strong> e adicione a linha a seguir debaixo de <code>use IlluminateHttpRequest;<\/code>, desta forma:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use Illuminate\\Http\\Request;\nuse App\\Models\\Post;<\/code><\/pre>\n<p>Agora o arquivo <strong>PostController.php<\/strong> deve ter a seguinte apar\u00eancia:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\Http\\Controllers;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\Post;\nclass PostController extends Controller\n{\n  \/**\n   * Display a listing of the resource.\n   *\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function index()\n  {\n    $posts = Post::all();\n    return view('posts.index', compact('posts'));\n  }\n  \/**\n   * Store a newly created resource in storage.\n   *\n   * @param  Illuminate\\Http\\Request  $request\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function store(Request $request)\n  {\n    $request-&gt;validate([\n      'title' =&gt; 'required|max:255',\n      'body' =&gt; 'required',\n    ]);\n    Post::create($request-&gt;all());\n    return redirect()-&gt;route('posts.index')\n      -&gt;with('success', 'Post created successfully.');\n  }\n  \/**\n   * Update the specified resource in storage.\n   *\n   * @param  Illuminate\\Http\\Request  $request\n   * @param  int  $id\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function update(Request $request, $id)\n  {\n    $request-&gt;validate([\n      'title' =&gt; 'required|max:255',\n      'body' =&gt; 'required',\n    ]);\n    $post = Post::find($id);\n    $post-&gt;update($request-&gt;all());\n    return redirect()-&gt;route('posts.index')\n      -&gt;with('success', 'Post updated successfully.');\n  }\n  \/**\n   * Remove the specified resource from storage.\n   *\n   * @param  int  $id\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function destroy($id)\n  {\n    $post = Post::find($id);\n    $post-&gt;delete();\n    return redirect()-&gt;route('posts.index')\n      -&gt;with('success', 'Post deleted successfully');\n  }\n  \/\/ routes functions\n  \/**\n   * Show the form for creating a new post.\n   *\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function create()\n  {\n    return view('posts.create');\n  }\n  \/**\n   * Display the specified resource.\n   *\n   * @param  int  $id\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function show($id)\n  {\n    $post = Post::find($id);\n    return view('posts.show', compact('post'));\n  }\n  \/**\n   * Show the form for editing the specified post.\n   *\n   * @param  int  $id\n   * @return Illuminate\\Http\\Response\n   *\/\n  public function edit($id)\n  {\n    $post = Post::find($id);\n    return view('posts.edit', compact('post'));\n  }\n}<\/code><\/pre>\n<h2>Adicione rotas<\/h2>\n<p>Depois de criar as fun\u00e7\u00f5es do controlador e o modelo <code>Post<\/code>, voc\u00ea deve adicionar rotas \u00e0s fun\u00e7\u00f5es do seu controlador.<\/p>\n<ol start=\"1\">\n<li>Abra <strong>routes\/web.php<\/strong> e exclua a rota padr\u00e3o que o aplicativo gerou. Substitua-a pelo c\u00f3digo abaixo para conectar as fun\u00e7\u00f5es do controlador \u00e0s suas respectivas rotas:<\/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>Para conectar as rotas, abra <strong>app\/Http\/Controllers\/PostController.php<\/strong> e adicione a linha a seguir sob a linha <code>use IlluminateSupportFacadesRoute;<\/code>, assim:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesRoute;\nuse AppHttpControllersPostController;<\/code><\/pre>\n<p>Agora o arquivo <strong>routes\/web.php<\/strong> deve ter o seguinte aspecto:<\/p>\n<pre><code class=\"language-php\">&lt;?php\nuse Illuminate\\Support\\Facades\\Route;\nuse AppHttpControllersPostController;\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>Gere arquivos Blade<\/h2>\n<p>Agora que voc\u00ea tem as rotas, pode criar os arquivos do <a href=\"https:\/\/kinsta.com\/pt\/blog\/laravel-blade\/\">Laravel Blade<\/a>. Antes de usar o Artisan para gerar os arquivos Blade, crie o comando <code>make:view<\/code>, com o qual voc\u00ea pode gerar arquivos <strong>blade.php<\/strong>.<\/p>\n<ol start=\"1\">\n<li>Execute o seguinte c\u00f3digo na CLI para criar um arquivo de comando <strong>MakeViewCommand<\/strong> dentro da pasta <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>Crie um comando para gerar arquivos <strong>.blade.php<\/strong> a partir da CLI, substituindo o c\u00f3digo no arquivo <strong>MakeViewCommand<\/strong> pelo seguinte:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">&lt;?php\nnamespace App\\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    $view = $this-&gt;argument('view');\n    $path = $this-&gt;viewPath($view);\n    $this-&gt;createDir($path);\n    if (File::exists($path))\n    {\n        $this-&gt;error(\"File {$path} already exists!\");\n        return;\n    }\n    File::put($path, $path);\n    $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    $view = str_replace('.', '\/', $view) . '.blade.php';\n    $path = \"resources\/views\/{$view}\";\n    return $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    $dir = dirname($path);\n    if (!file_exists($dir))\n    {\n        mkdir($dir, 0777, true);\n    }\n  }\n}<\/code><\/pre>\n<h3>Crie uma p\u00e1gina inicial<\/h3>\n<p>Em seguida, crie sua p\u00e1gina inicial. A p\u00e1gina inicial \u00e9 o arquivo <strong>index.blade.php<\/strong>, que lista todos os posts.<\/p>\n<ol start=\"1\">\n<li>Para criar a p\u00e1gina inicial, execute:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.index<\/code><\/pre>\n<p>Isso cria uma pasta <strong>posts<\/strong> dentro da pasta <strong>\/resources\/views<\/strong> e um arquivo <strong>index.blade.php<\/strong> abaixo dela. O caminho resultante \u00e9 <strong>\/resources\/views\/posts\/index.blade.php<\/strong>.<\/p>\n<ol start=\"2\">\n<li>Adicione o seguinte c\u00f3digo dentro do arquivo <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    &lt;div class=\"container-fluid\"&gt;\n      &lt;a class=\"navbar-brand h1\" href={{ route('posts.index') }}&gt;CRUDPosts&lt;\/a&gt;\n      &lt;div class=\"justify-end \"&gt;\n        &lt;div class=\"col \"&gt;\n          &lt;a class=\"btn btn-sm btn-success\" href={{ route('posts.create') }}&gt;Add Post&lt;\/a&gt;\n        &lt;\/div&gt;\n      &lt;\/div&gt;\n    &lt;\/div&gt;\n  &lt;\/nav&gt;\n  &lt;div class=\"container mt-5\"&gt;\n    &lt;div class=\"row\"&gt;\n      @foreach ($posts as $post)\n        &lt;div class=\"col-sm\"&gt;\n          &lt;div class=\"card\"&gt;\n            &lt;div class=\"card-header\"&gt;\n              &lt;h5 class=\"card-title\"&gt;{{ $post-&gt;title }}&lt;\/h5&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"card-body\"&gt;\n              &lt;p class=\"card-text\"&gt;{{ $post-&gt;body }}&lt;\/p&gt;\n            &lt;\/div&gt;\n            &lt;div class=\"card-footer\"&gt;\n              &lt;div class=\"row\"&gt;\n                &lt;div class=\"col-sm\"&gt;\n                  &lt;a href=\"{{ route('posts.edit', $post-&gt;id) }}\"\n            class=\"btn btn-primary btn-sm\"&gt;Edit&lt;\/a&gt;\n                &lt;\/div&gt;\n                &lt;div class=\"col-sm\"&gt;\n                    &lt;form action=\"{{ route('posts.destroy', $post-&gt;id) }}\" method=\"post\"&gt;\n                      @csrf\n                      @method('DELETE')\n                      &lt;button type=\"submit\" class=\"btn btn-danger btn-sm\"&gt;Delete&lt;\/button&gt;\n                    &lt;\/form&gt;\n                &lt;\/div&gt;\n              &lt;\/div&gt;\n            &lt;\/div&gt;\n          &lt;\/div&gt;\n        &lt;\/div&gt;\n      @endforeach\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<p>O c\u00f3digo acima cria uma p\u00e1gina HTML simples que usa o <a href=\"https:\/\/getbootstrap.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap<\/a> para criar o estilo. Ele estabelece uma barra de navega\u00e7\u00e3o e um template de grade que lista todos os posts no banco de dados com detalhes e dois bot\u00f5es de a\u00e7\u00e3o \u2014 <strong>Edit<\/strong> e <strong>Delete<\/strong> \u2014 usando o auxiliar <code>@foreach<\/code> do Blade.<\/p>\n<p>O bot\u00e3o <strong>Edit<\/strong> leva o usu\u00e1rio \u00e0 p\u00e1gina <strong>Edit post<\/strong>, onde ele pode editar o post. O bot\u00e3o <strong>Delete<\/strong> exclui o post do banco de dados usando <code>{{ route('posts.destroy', $post-&gt;id) }}<\/code> com um m\u00e9todo <code>DELETE<\/code>.<\/p>\n<p><strong>Observa\u00e7\u00e3o<\/strong>: O c\u00f3digo da barra de navega\u00e7\u00e3o para todos os arquivos \u00e9 o mesmo do arquivo anterior.<\/p>\n<ol start=\"3\">\n<li>Crie a p\u00e1gina <strong>create.blade.php<\/strong>. O arquivo Blade chamado <strong>create<\/strong> adiciona posts ao banco de dados. Use o seguinte comando para gerar o arquivo:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.create<\/code><\/pre>\n<p>Isso gera um arquivo <strong>create.blade.php<\/strong> dentro da pasta<strong> \/resources\/views\/posts<\/strong>.<\/p>\n<ol start=\"4\">\n<li>Adicione o seguinte c\u00f3digo ao arquivo <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    &lt;div class=\"col-10 col-md-8 col-lg-6\"&gt;\n      &lt;h3&gt;Add a Post&lt;\/h3&gt;\n      &lt;form action=\"{{ route('posts.store') }}\" method=\"post\"&gt;\n        @csrf\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"title\"&gt;Title&lt;\/label&gt;\n          &lt;input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\" required&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"body\"&gt;Body&lt;\/label&gt;\n          &lt;textarea class=\"form-control\" id=\"body\" name=\"body\" rows=\"3\" required&gt;&lt;\/textarea&gt;\n        &lt;\/div&gt;\n        &lt;br&gt;\n        &lt;button type=\"submit\" class=\"btn btn-primary\"&gt;Create Post&lt;\/button&gt;\n      &lt;\/form&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>O c\u00f3digo acima cria um formul\u00e1rio com os campos <code>title<\/code> e <code>body<\/code> e um bot\u00e3o <code>submit<\/code> para adicionar um post ao banco de dados por meio da a\u00e7\u00e3o <code>{{ route('posts.store') }}<\/code> com um m\u00e9todo <code>POST<\/code>.<\/p>\n<ol start=\"5\">\n<li>Crie a p\u00e1gina <strong>Edit post<\/strong> para editar posts no banco de dados. Use o seguinte comando para gerar o arquivo:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan make:view posts.edit<\/code><\/pre>\n<p>Isso cria um arquivo <strong>edit.blade.php<\/strong> dentro da pasta <strong>\/resources\/views\/posts<\/strong>.<\/p>\n<ol start=\"6\">\n<li>Adicione o seguinte c\u00f3digo ao arquivo <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    &lt;div class=\"col-10 col-md-8 col-lg-6\"&gt;\n      &lt;h3&gt;Update Post&lt;\/h3&gt;\n      &lt;form action=\"{{ route('posts.update', $post-&gt;id) }}\" method=\"post\"&gt;\n        @csrf\n        @method('PUT')\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"title\"&gt;Title&lt;\/label&gt;\n          &lt;input type=\"text\" class=\"form-control\" id=\"title\" name=\"title\"\n            value=\"{{ $post-&gt;title }}\" required&gt;\n        &lt;\/div&gt;\n        &lt;div class=\"form-group\"&gt;\n          &lt;label for=\"body\"&gt;Body&lt;\/label&gt;\n          &lt;textarea class=\"form-control\" id=\"body\" name=\"body\" rows=\"3\" required&gt;{{ $post-&gt;body }}&lt;\/textarea&gt;\n        &lt;\/div&gt;\n        &lt;button type=\"submit\" class=\"btn mt-3 btn-primary\"&gt;Update Post&lt;\/button&gt;\n      &lt;\/form&gt;\n    &lt;\/div&gt;\n  &lt;\/div&gt;\n&lt;\/div&gt;<\/code><\/pre>\n<p>O c\u00f3digo acima cria um formul\u00e1rio com os campos <code>title<\/code> e <code>body<\/code> e um bot\u00e3o de envio para editar um post com o <code>id<\/code> especificado no banco de dados por meio da a\u00e7\u00e3o <code>{{ route('posts.update') }}<\/code> com um m\u00e9todo <code>PUT<\/code>.<\/p>\n<ol start=\"7\">\n<li>Em seguida reinicie o servidor de aplicativos usando o c\u00f3digo abaixo:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan serve<\/code><\/pre>\n<p>Visite <code>http:\/\/127.0.0.1:8000<\/code> em seu navegador para ver seu novo blog. Clique no bot\u00e3o <strong>Add Post<\/strong> para adicionar novos posts.<\/p>\n<h2>Implemente e teste seu aplicativo CRUD<\/h2>\n<p>Prepare seu aplicativo para a implanta\u00e7\u00e3o da seguinte forma:<\/p>\n<ol start=\"1\">\n<li>Torne a implanta\u00e7\u00e3o f\u00e1cil e objetiva declarando a pasta p\u00fablica. Adicione um arquivo <strong>.htaccess<\/strong> \u00e0 raiz da pasta do aplicativo com o seguinte c\u00f3digo:<\/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>Force seu aplicativo a usar <code>HTTPS<\/code> adicionando o seguinte c\u00f3digo acima de suas rotas dentro do arquivo <strong>routes\/web.php<\/strong>:<\/li>\n<\/ol>\n<pre><code class=\"language-php\">use IlluminateSupportFacadesURL;\nURL::forceScheme('https');<\/code><\/pre>\n<ol start=\"3\">\n<li>Envie seu c\u00f3digo para um reposit\u00f3rio Git. A Kinsta oferece suporte a implanta\u00e7\u00f5es do GitHub, GitLab ou Bitbucket.<\/li>\n<\/ol>\n<h3>Configure um projeto no MyKinsta<\/h3>\n<ol start=\"1\">\n<li>Crie uma conta <a href=\"https:\/\/kinsta.com\/pt\/mykinsta\/\">MyKinsta<\/a>, se voc\u00ea ainda n\u00e3o tiver uma.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Fa\u00e7a login em sua conta e clique no bot\u00e3o <strong>Adicionar servi\u00e7o<\/strong> no painel para criar um novo aplicativo.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>Se voc\u00ea for novo no aplicativo, conecte-se \u00e0 sua conta do GitHub, GitLab ou Bitbucket e conceda permiss\u00f5es espec\u00edficas.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Preencha o formul\u00e1rio e adicione o valor <code>APP_KEY<\/code>. Voc\u00ea pode encontrar o valor correspondente no arquivo <strong>.env<\/strong>.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Selecione seus recursos de build e se voc\u00ea deseja usar o caminho de build do aplicativo ou compilar o aplicativo com o Dockerfile. Para esta demonstra\u00e7\u00e3o, deixe o MyKinsta criar o aplicativo com base em seu reposit\u00f3rio.<\/li>\n<\/ol>\n<ol start=\"6\">\n<li>Especifique os diferentes processos que voc\u00ea deseja executar durante a implanta\u00e7\u00e3o. Por ora voc\u00ea pode deix\u00e1-lo em branco.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Por fim, adicione seu m\u00e9todo de pagamento.<\/li>\n<\/ol>\n<p>Ap\u00f3s confirmar o m\u00e9todo de pagamento, o MyKinsta implementa seu aplicativo e atribui a voc\u00ea uma URL, conforme mostrado abaixo:<\/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=\"Implanta\u00e7\u00e3o bem-sucedida.\" width=\"492\" height=\"618\"><figcaption class=\"wp-caption-text\">Implanta\u00e7\u00e3o bem-sucedida.<\/figcaption><\/figure>\n<p>Voc\u00ea pode visitar o link, mas obt\u00e9m uma p\u00e1gina <code>500 | Server Error<\/code>, porque o aplicativo precisa de uma conex\u00e3o de banco de dados v\u00e1lida para funcionar. A se\u00e7\u00e3o a seguir resolve esse problema.<\/p>\n<h3>Crie um banco de dados via MyKinsta<\/h3>\n<ol start=\"1\">\n<li>Para criar um banco de dados, v\u00e1 ao painel MyKinsta e clique em <strong>Adicionar servi\u00e7o<\/strong>.<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>Selecione <strong>Banco de dados<\/strong> e preencha o formul\u00e1rio com o nome que deseja para o banco de dados, tipo, nome de usu\u00e1rio e senha. Adicione o local do centro de dados e um tamanho de banco de dados adequado ao seu aplicativo.<\/li>\n<\/ol>\n<ol start=\"3\">\n<li>A p\u00e1gina seguinte exibir\u00e1 um resumo dos custos e o seu m\u00e9todo de pagamento. Clique em <strong>Criar banco de dados <\/strong>para concluir o processo.<\/li>\n<\/ol>\n<ol start=\"4\">\n<li>Ap\u00f3s criar o banco de dados, o MyKinsta redireciona voc\u00ea para sua lista de servi\u00e7os. Clique no banco de dados que voc\u00ea acabou de criar e role para baixo at\u00e9 <strong>Conex\u00f5es externas<\/strong>. Copie as credenciais do banco de dados.<\/li>\n<\/ol>\n<ol start=\"5\">\n<li>Volte para a p\u00e1gina de <strong>Implanta\u00e7\u00e3o<\/strong> do aplicativo e clique em <strong>Configura\u00e7\u00f5es<\/strong>. Em seguida role para baixo at\u00e9 <strong>Vari\u00e1veis de ambiente<\/strong> e clique em <strong>Adicionar vari\u00e1veis de ambiente<\/strong>. Adicione as credenciais do banco de dados como vari\u00e1veis de ambiente na seguinte ordem:<\/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>Agora a lista de vari\u00e1veis de ambiente do aplicativo deve estar assim:<\/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=\"A lista de vari\u00e1veis .env.\" width=\"561\" height=\"629\"><figcaption class=\"wp-caption-text\">A lista de vari\u00e1veis .env.<\/figcaption><\/figure>\n<ol start=\"6\">\n<li>V\u00e1 para a p\u00e1gina <strong>Deployments<\/strong> do aplicativo e implemente manualmente o aplicativo clicando em <strong>Deploy Now <\/strong>para aplicar as altera\u00e7\u00f5es. A essa altura, voc\u00ea j\u00e1 criou um banco de dados e o conectou ao seu aplicativo.<\/li>\n<\/ol>\n<ol start=\"7\">\n<li>Finalmente, para criar as tabelas no seu banco de dados MyKinsta, conecte o banco de dados ao seu aplicativo local atualizando o arquivo <strong>.env<\/strong> com as mesmas credenciais que voc\u00ea inseriu no seu aplicativo no MyKinsta, e execute o seguinte comando:<\/li>\n<\/ol>\n<pre><code class=\"language-sh\">php artisan migrate<\/code><\/pre>\n<p>Esse comando executa todos os arquivos de migra\u00e7\u00e3o e cria todas as tabelas definidas no seu aplicativo MyKinsta.<\/p>\n<p>Agora voc\u00ea j\u00e1 pode testar seu aplicativo com a URL atribu\u00edda ap\u00f3s a primeira implanta\u00e7\u00e3o.<\/p>\n<h2>Resumo<\/h2>\n<p>O Laravel \u00e9 um framework abrangente para a cria\u00e7\u00e3o de aplicativos web robustos e escal\u00e1veis que exigem funcionalidade CRUD. Com sua sintaxe intuitiva e recursos avan\u00e7ados, o Laravel facilita a cria\u00e7\u00e3o de opera\u00e7\u00f5es CRUD em seu aplicativo.<\/p>\n<p>Este artigo abordou os conceitos fundamentais das opera\u00e7\u00f5es CRUD e como implement\u00e1-las usando os recursos internos do Laravel. E tamb\u00e9m explicou:<\/p>\n<ul>\n<li>Como criar um banco de dados no MyKinsta e conect\u00e1-lo ao seu aplicativo<\/li>\n<li>Como usar as migra\u00e7\u00f5es do Laravel para definir a tabela do banco de dados, criar o arquivo do controlador e suas fun\u00e7\u00f5es<\/li>\n<li>Como definir um template e conect\u00e1-lo ao controlador. O roteamento do Laravel gera arquivos Blade para criar p\u00e1ginas e formul\u00e1rios correspondentes, e para implementar e testar o aplicativo usando o MyKinsta<\/li>\n<\/ul>\n<p>Agora que voc\u00ea j\u00e1 viu como \u00e9 f\u00e1cil realizar opera\u00e7\u00f5es CRUD no Laravel, <a href=\"https:\/\/my.kinsta.com\/login?lang=pt\">confira o MyKinsta<\/a> para desenvolvimento e <a href=\"https:\/\/sevalla.com\/application-hosting\/\">hospedagem de aplicativos<\/a> da web.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O Laravel \u00e9 um framework PHP popular para a cria\u00e7\u00e3o de aplicativos web modernos e din\u00e2micos no atual cen\u00e1rio de constante evolu\u00e7\u00e3o e ritmo acelerado de &#8230;<\/p>\n","protected":false},"author":290,"featured_media":62228,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[984],"class_list":["post-62227","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>Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o 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\/pt\/blog\/laravel-crud\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel\" \/>\n<meta property=\"og:description\" content=\"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-04T08:58:27+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-06T11:37:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/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=\"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marcia Ramos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/\"},\"author\":{\"name\":\"Marcia Ramos\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\"},\"headline\":\"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel\",\"datePublished\":\"2023-12-04T08:58:27+00:00\",\"dateModified\":\"2023-12-06T11:37:50+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/\"},\"wordCount\":2499,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg\",\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/\",\"name\":\"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg\",\"datePublished\":\"2023-12-04T08:58:27+00:00\",\"dateModified\":\"2023-12-06T11:37:50+00:00\",\"description\":\"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg\",\"width\":6084,\"height\":3042},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116\",\"name\":\"Marcia Ramos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/marciaramos\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel - Kinsta\u00ae","description":"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o 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\/pt\/blog\/laravel-crud\/","og_locale":"pt_PT","og_type":"article","og_title":"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel","og_description":"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o Laravel.","og_url":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2023-12-04T08:58:27+00:00","article_modified_time":"2023-12-06T11:37:50+00:00","og_image":[{"width":6084,"height":3042,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg","type":"image\/jpeg"}],"author":"Marcia Ramos","twitter_card":"summary_large_image","twitter_description":"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o Laravel.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Marcia Ramos","Tempo estimado de leitura":"15 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/"},"author":{"name":"Marcia Ramos","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116"},"headline":"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel","datePublished":"2023-12-04T08:58:27+00:00","dateModified":"2023-12-06T11:37:50+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/"},"wordCount":2499,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg","inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/","url":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/","name":"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg","datePublished":"2023-12-04T08:58:27+00:00","dateModified":"2023-12-06T11:37:50+00:00","description":"Opera\u00e7\u00f5es CRUD (criar, ler, atualizar, excluir) s\u00e3o a ess\u00eancia de todo app voltado a banco de dados. Saiba como executar CRUD com o Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/08\/laravel-crud.jpg","width":6084,"height":3042},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/laravel-crud\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"Como Fazer CRUD (Criar, Ler, Atualizar, Excluir) com o Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/72bff0015d3fb3ba3d8a85494dc0b116","name":"Marcia Ramos","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/marciaramos\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/62227","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/290"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=62227"}],"version-history":[{"count":15,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/62227\/revisions"}],"predecessor-version":[{"id":65648,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/62227\/revisions\/65648"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/translations\/es"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/62227\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/62228"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=62227"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=62227"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=62227"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}