Posted on: September 02, 2021 07:11 PM
Posted by: Renato
Views: 2893
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:
- Mova suas migrações SQL para uma pasta dentro da pasta de migrações. Vou chamá-lo de MySQL.
- 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');
}
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.
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');
}
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/
Donate to Site
Renato
Developer