Do not speak Portuguese? Translate this site with Google or Bing Translator
Laravel MongoDB CRUD

Posted on: September 02, 2021 07:11 PM

Posted by: Renato

Categories: Laravel mongodb

Views: 2683

Laravel MongoDB CRUD

Laravel MongoDB CRUD: Guia Completo Passo A Passo

Podemos usar a combinação do Laravel MongoDB usando o pacote jenssegers / mongodb.  Se você precisar obter mais informações sobre o pacote Jessegers, vá para seu Github . MongoDB é um banco de dados NoSQL de código aberto, plataforma cruzada e orientado a documentos usado para armazenamento de dados de alto volume. MongoDB é escrito em C ++. Primeiro, vamos delinear toda a nossa postagem no blog.

NoSQL (MongoDB) parece bastante impopular no Laravel, não porque ninguém se importe, mas porque muitas pessoas não usarão o Mongo em vez do SQL, já que o SQL já está embutido no Laravel e fornece uma ótima experiência para os novatos entenderem como o Laravel funciona com bancos de dados.

#Eloquent ORM para NoSQL

Podem ser mais pacotes que lidam com NoSQL, mas quando é baseado na comunidade, devemos confiar mais. Eu também o executei em produção por um bom tempo e, até agora, nunca encontrei problemas.

 

A configuração é bastante simples se você ler a documentação - ela o ajudará a instalá-lo através do Composer, configurar um driver de banco de dados. Depois disso, vamos nos concentrar apenas nas coisas essenciais.

 

Este pacote oferece um modelo Moloquent, como afirma a documentação. É um modelo Eloquent, mas feito para Mongo.

#Como usar o Laravel com MongoDB

  • Etapa 1: Configurar o banco de dados Mongodb no Windows.
  • Passo 2: Instale e configure o Laravel.
  • Etapa 3: Instale e configure o pacote MongoDB para Laravel.
  • Etapa 4: Crie um modelo, uma rota, um controlador e um arquivo de visualização.
  • Passo 5: A partir do arquivo de visualização, preencha os detalhes de entrada e envie a solicitação POST para o servidor Laravel, salvando os dados no banco de dados MongoDB.
  • Passo 6: Mostre os dados no frontend usando a visualização do Laravel.
  • Etapa 7: Em seguida, crie um formulário de edição e atualize os dados no banco de dados.
  • Etapa 8: Grave a lógica para excluir os dados do banco de dados dentro do arquivo do controlador.

Ok, vamos seguir as etapas acima, uma por uma.

 

#Configure o banco de dados Mongodb no Windows

Se você estiver conectando o banco de dados MongoDB ao Laravel ou a qualquer aplicativo PHP, poderá enfrentar um problema: o driver PHP MongoDB.

O pacote que instalaremos no Laravel requer a instalação do driver php mongodb em nossa máquina. Mas se você tentar baixar um pacote direto sem instalar o driver, encontrará um erro que diz que há uma extensão ausente em seus arquivos de extensão PHP ou outros erros dependendo do seu ambiente configurado.

É o problema mais crítico neste cenário. Felizmente, tenho a melhor solução possível para você. Portanto, vou ajudá-lo a conectar seu aplicativo Laravel ao banco de dados MongoDB. Portanto, primeiro você precisa acessar este Link. Presumo que você esteja usando o Windows.

https://pecl.php.net/package/mongodb/1.3.0/windows

Agora, no momento, estou usando o sistema operacional Windows 10 de 32 bits e minha versão do PHP é 7.1. Portanto, você escolherá o arquivo de download com base na configuração da sua máquina.

Baixe o arquivo Zip DLL e extraia-o dentro do diretório ext do seu PHP. Esse diretório ext já  contém muitos arquivos de extensões DLL.

Estou usando o XAMPP, portanto, o caminho do diretório para a extensão é C: \ xampp \ php \ ext . O nome do arquivo DLL do driver MongoDB é  php_mongodb.dll. Portanto, certifique-se de que este arquivo esteja instalado corretamente no diretório ext.

Agora, abra o  arquivo php.ini  e adicione a seguinte linha. Se a linha já existe, verifique se ela está comentada ou não; se comentado, remova o ponto-e-vírgula para descomentar. Para trabalhar com o MongoDB, este driver precisa ser inicializado no início do servidor.

extension=php_mongodb.dll

Salve esse arquivo.

Reinicie o servidor. É essencial; caso contrário, nossas mudanças não serão refletidas.

Agora, você poderá conectar seu aplicativo PHP ao banco de dados MongoDB . No nosso caso, é a conexão do Laravel MongoDB. Agora, estaremos prontos para iniciar nosso  Tutorial do Laravel MongoDB CRUD com um exemplo.

Laravel MongoDB CRUD

Um dos grandes problemas que encontrei com o MongoDB foi quando se tratava do usuário. O modelo de usuário estende um modelo autenticável . Infelizmente, o MongoDB não suporta o modelo padrão que o Laravel oferece, então teremos que usar aquele que vem com o pacote:

use Jenssegers\Mongodb\Auth\User as Authenticatable;

class User extends Authenticatable
{
   //
}

Se você quiser usar o Laravel Passport com MongoDB, certifique-se de usar o designmynight / laravel-mongodb-passport . Ele fornecerá a você outra classe autenticável que fará o trabalho por você!

Passo 1: Instale o Projeto Laravel

Baixe o novo projeto do Laravel escrevendo o seguinte comando.

 

composer create-project --prefer-dist laravel/laravel laravelmongodb

Etapa 2: configurar o banco de dados MongoDB

Portanto, agora, vamos configurar  o banco de dados MongoDB em nosso aplicativo laravel. Portanto, abra o  arquivo .env e adicione o seguinte detalhe.

//.env

MONGO_DB_HOST=127.0.0.1
MONGO_DB_PORT=27017
MONGO_DB_DATABASE=mongocrud
MONGO_DB_USERNAME=
MONGO_DB_PASSWORD=

Em seguida, queremos adicionar uma nova conexão mongodb no  arquivo config >> database.php  .

//database.php

'connections' => [

        ...
     'mongodb' => [
            'driver'   => 'mongodb',
            'host'     => env('MONGO_DB_HOST', 'localhost'),
            'port'     => env('MONGO_DB_PORT', 27017),
            'database' => env('MONGO_DB_DATABASE'),
            'username' => env('MONGO_DB_USERNAME'),
            'password' => env('MONGO_DB_PASSWORD'),
            'options'  => []
        ],
    ]

Etapa 3: Instale o pacote Laravel MongoDB

Agora iremos instalar o pacote jenssegers / mongodb em nosso projeto.

composer require jenssegers/mongodb

Etapa 4: Definir provedores.

Encontre os provedores no  arquivo config >> app.php e registre o MongodbServiceProvider .

'providers' => [
        Jenssegers\Mongodb\MongodbServiceProvider::class,
           ]

Etapa 5: crie um modelo

Digite o seguinte comando em seu terminal.

php artisan make:model Car

Isso criará um arquivo Car.php .

O pacote inclui uma classe Eloquent habilitada para MongoDB que você pode usar para estabelecer modelos para coleções correspondentes. Adicione o código no arquivo Car.php .

//Car.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Jenssegers\Mongodb\Eloquent\Model as Eloquent;

class Car extends Eloquent
{
    protected $connection = 'mongodb';
    protected $collection = 'cars';
    
    protected $fillable = [
        'carcompany', 'model','price'
    ];
}

O SQL funciona com tabelas, o NoSQL funciona com coleções. Portanto, em vez  da variável $ table , teremos uma variável $ collection.

Além disso, é essencial observar que a chave primária não pode ser definida por meio de $ primaryKey e o $ incrementing não está disponível.

Além disso, você pode querer especificar que o modelo pertence à conexão mongodb que você criou anteriormente.

Você deve estar tranquilo com o fato de que o MongoDB atribui automaticamente chaves primárias aos documentos (o equivalente a linhas do SQL). Portanto, para acessar a chave primária de um documento, você deve usar o mesmo nome de atributo do modelo básico.

echo 'The Car ID is: '. $car->_id;
echo 'The Car ID is '. $car->id; // they both work

Usar find () usa o campo de chave primária para recuperar o resultado.

Quase não há esquemas para definir

No NoSQL, não temos esquemas para definir. Então podemos ficar tão loucos quanto quisermos. Mas podemos aproveitar as migrações para definir índices, campos exclusivos e outros campos específicos do mongo.

Veja o seguinte código.

Schema::connection('mongodb')->dropIfExists('cars');
Schema::create('cars', function ($collection) {
   $collection->index('slug');
   $collection->unique('slug');
});

O processo de migração é o mesmo. Para executar as migrações, certifique-se de que o driver padrão definido (a variável DB_CONNECTION env) esteja definido como mongodb.

php artisan migrate

 Caso você queira executar SQL e NoSQL no mesmo projeto, posso dar algumas dicas:

  1. Mova suas migrações SQL para uma pasta dentro da pasta de migrações. Vou chamá-lo de MySQL.
  2. Todos os modelos que funcionam com outro driver de banco de dados padrão devem estender o modelo certo.

As migrações em execução devem ser feitas de ambas as maneiras, local ou em produção, para o driver padrão (ou seja, quando DB_CONNECTION é definido como mongodb).

Para driver MySQL,

php artisan migrate --database=mysql --path=database/migrations/mysql/

Portanto, desde que o NoSQL não tenha esquema, podemos defini-lo enquanto trabalhamos com os dados, certo? No MongoDB, podemos descartar campos sempre que quisermos.

Portanto, se quisermos eliminar alguns campos, podemos fazê-lo usando o método drop.

$ppl = Employee::where('name', 'TrevorNoah')->first();
$ppl->drop('field1');
// or
$john->drop(['field1', 'field2']); // works with more

Agora, vamos criar um arquivo de visualização.

Etapa 6: Criar um arquivo de visualização

Crie um arquivo em resources >> views >> carcreate.blade.php  e coloque o seguinte código nele.

<!-- carcreate.blade.php -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel MongoDB CRUD Tutorial With Example</title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">  
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>  
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>  
  </head>
  <body>
    <div class="container">
      <h2>Laravel MongoDB CRUD Tutorial With Example</h2><br/>
      <div class="container">
    </div>
      <form method="post" action="{{url('add')}}">
        @csrf
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="Carcompany">Car Company:</label>
            <input type="text" class="form-control" name="carcompany">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="Model">Model:</label>
            <input type="text" class="form-control" name="model">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="Price">Price:</label>
            <input type="text" class="form-control" name="price">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <button type="submit" class="btn btn-success">Submit</button>
          </div>
        </div>
      </form>
   </div>
  </body>
</html>

Etapa 7: Crie um controlador e uma rota

php artisan make:controller CarController

Ele criará um arquivo de controlador chamado Car Controller.php.

Registramos as rotas em rotas >> arquivo web.php  . Então vamos fazer isso.

//web.php

Route::get('add','CarController@create');
Route::post('add','CarController@store');
Route::get('car','CarController@index');
Route::get('edit/{id}','CarController@edit');
Route::post('edit/{id}','CarController@update');
Route::delete('{id}','CarController@destroy');

Adicione o código à função create ()  para exibir a visualização.

//CarController.php

public function create()
    {
        return view('carcreate');
    }

 Etapa 8: Salvar dados no banco de dados MongoDB

Precisamos codificar a função de armazenamento para salvar os dados no banco de dados.

//CarController.php

use App\Car;

   public function store(Request $request)
    {
        $car = new Car();
        $car->carcompany = $request->get('carcompany');
        $car->model = $request->get('model');
        $car->price = $request->get('price');        
        $car->save();
        return redirect('car')->with('success', 'Car has been successfully added');
    }

Tutorial do Laravel MongoDB CRUD

Etapa 9: Faça uma página de índice para listar as informações do carro.

Para esse front-end, precisamos enviar os dados para carindex.blade.php. Portanto, no arquivo CarController.php  , precisamos escrever o código para obter os dados e retorná-los à visualização do  índice.

//PostController.php

public function index()
    {
        $cars=Car::all();
        return view('carindex',compact('cars'));
    }

Em  recursos , >> visualizações,  crie um arquivo blade diferente denominado arquivo carindex.blade.php  e coloque o código a seguir nele.

<!-- carindex.blade.php -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Index Page</title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
  </head>
  <body>
    <div class="container">
    <br />
    @if (\Session::has('success'))
      <div class="alert alert-success">
        <p>{{ \Session::get('success') }}</p>
      </div><br />
     @endif
    <table class="table table-striped">
    <thead>
      <tr>
        <th>ID</th>
        <th>Company</th>
        <th>Model</th>
        <th>Price</th>
        <th colspan="2">Action</th>
      </tr>
    </thead>
    <tbody>
      
      @foreach($cars as $car)
      <tr>
        <td>{{$car->id}}</td>
        <td>{{$car->carcompany}}</td>
        <td>{{$car->model}}</td>
        <td>{{$car->price}}</td>
        <td><a href="{{action('CarController@edit', $car->id)}}" class="btn btn-warning">Edit</a></td>
        <td>
          <form action="{{action('CarController@destroy', $car->id)}}" method="post">
            @csrf
            <input name="_method" type="hidden" value="DELETE">
            <button class="btn btn-danger" type="submit">Delete</button>
          </form>
        </td>
      </tr>
      @endforeach
    </tbody>
  </table>
  </div>
  </body>
</html>

Então, se você digitar a URL: http: // localhost: 8000 / car, você pode ver a página como a imagem abaixo.

Exemplo de Laravel MongoDB CRUD

Etapa 10: construir uma visualização de edição para atualizar as informações do carro

A próxima etapa será chamar a função de edição no arquivo CarController.php  e adicionar o seguinte código a ele.

public function edit($id)
    {
        $car = Car::find($id);
        return view('caredit',compact('car','id'));
    }

Agora, crie um arquivo caredit.blade.php  dentro da  pasta resources >> views  .

<!-- caredit.blade.php -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Laravel MongoDB CRUD Tutorial With Example</title>
    <link rel="stylesheet" href="{{asset('css/app.css')}}">
    <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">  
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>  
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"></script>  
  </head>
  <body>
    <div class="container">
      <h2>Edit A Form</h2><br/>
      <div class="container">
    </div>
      <form method="post" action="{{action('CarController@update', $id)}}">
        @csrf
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="Carcompany">Car Company:</label>
            <input type="text" class="form-control" name="carcompany" value="{{$car->carcompany}}">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="Model">Model:</label>
            <input type="text" class="form-control" name="model" value="{{$car->model}}">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <label for="Price">Price:</label>
            <input type="text" class="form-control" name="price" value="{{$car->price}}">
          </div>
        </div>
        <div class="row">
          <div class="col-md-4"></div>
          <div class="form-group col-md-4">
            <button type="submit" class="btn btn-success">Update</button>
          </div>
        </div>
      </form>
   </div>
  </body>
</html>

O próximo movimento será adicionar algum código na função update () .

//CarController.php

public function update(Request $request, $id)
    {
        $car= Car::find($id);
        $car->carcompany = $request->get('carcompany');
        $car->model = $request->get('model');
        $car->price = $request->get('price');        
        $car->save();
        return redirect('car')->with('success', 'Car has been successfully update');
    }

tutorial laravel mongodb

Etapa 11: Excluir as informações do carro

//CarController.php

public function destroy($id)
    {
        $car = Car::find($id);
        $car->delete();
        return redirect('car')->with('success','Car has been  deleted');
    }

O código final de CarController.php se parece com o código abaixo.

//CarController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Car;

class CarController extends Controller
{
    public function create()
    {
        return view('carcreate');
    }
    public function store(Request $request)
    {
        $car=new Car();
        $car->carcompany = $request->get('carcompany');
        $car->model = $request->get('model');
        $car->price = $request->get('price');        
        $car->save();
        return redirect('car')->with('success', 'Car has been successfully added');
    }
    public function index()
    {
        $cars=Car::all();
        return view('carindex',compact('cars'));
    }
    public function edit($id)
    {
        $car = Car::find($id);
        return view('caredit',compact('car','id'));
    }
    public function update(Request $request, $id)
    {
        $car= Car::find($id);
        $car->carcompany = $request->get('carcompany');
        $car->model = $request->get('model');
        $car->price = $request->get('price');        
        $car->save();
        return redirect('car')->with('success', 'Car has been successfully update');
    }
    public function destroy($id)
    {
        $car = Car::find($id);
        $car->delete();
        return redirect('car')->with('success','Car has been  deleted');
    }
}

Finalmente, nosso tutorial Laravel MongoDB CRUD com exemplo  acabou. 

Vantagens do MongoDB

Mesmo para aplicativos de alto tráfego, o MongoDB é rápido e confiável. Em média, ele consome cerca de 4 GB de RAM com cerca de 600 milhões de leituras, gravações e exclusões de documentos em um mês inteiro, com uma média de 600 gravações e leituras, combinadas, por segundo.

O que eu não recomendo é usá-lo para armazenamento em cache - sempre que você quiser armazenar em cache, lembre-se de usar memória em vez de disco, pois fornece menos atrito e mais velocidade de acesso e gravação.

Meu codigo Fonte:

https://gitlab.com/cpdrenato/laravel-mongodb-cars

- Fonte

https://appdividend.com/2018/05/10/laravel-mongodb-crud-tutorial-with-example/


1

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (15) Variados (109) PHP (130) Laravel (157) Black Hat (3) front-end (28) linux (113) postgresql (39) Docker (26) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (54) devops (25) nodejs (5) npm (2) nvm (1) git (8) firefox (1) react (6) reactnative (5) collections (1) javascript (6) reactjs (7) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (1) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (11) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (4) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (1) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (40) Kubernetes (2) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (1) jwt (4) security (2) translate (1) kube (1) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (2) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (2) Architecture (3) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (1) autorizacao (2) authentication (4) authorization (2) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1)

New Articles



Get Latest Updates by Email