همانگونه که می دانید CRUD به معنی 4 فرایند اصلی کار با دیتابیس یعنی Create, Read, Update و Delete می باشد، ما در این آموزش قصد داریم این عملیات ها را با ایجاد یک کنترلر و روت های آن در دیتابیس MongoDb و در فریم وورک لاراول انجام دهیم.
نیازمندی:
برای استفاده از این آموزش باید MongoDB بر روی سیستم شما نصب باشد
برای نصب mongodb در ویندوز اینجا را ببینید
همچنین برای فعال سازی و کار با mongodb در لاراول از پکیج jenssegers/mongodb استفاده خواهیم کرد که از اینجا می توانید صفحه گیت هاب این پکیج را مشاهده و اطلاعات بیشتری کسب نمایید
پس از نصب mongodb بر روی سیستم حال می توانید ادامه آموزش را انجام دهید
آموزش (CRUD ) با MongoDB در لاراول
1- نصب لاراول: با استفاده از دستور زیر آخرین نسخه لاراول را نصب کنید
composer create-project --prefer-dist laravel/laravel laravelmongodb
2- تنظیمات config mongodb:
فایل .env را باز و کدهای زیر را در آن قرار دهید:
MONGO_DB_HOST=127.0.0.1
MONGO_DB_PORT=27017
MONGO_DB_DATABASE=mongocrud
MONGO_DB_USERNAME=
MONGO_DB_PASSWORD=
حال به دایرکتوری config رفته و فایل database.php را باز کنید و کد زیر را در آرایه connections بصورت زیر قرار دهید:
//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' => []
],
]
3- نصب پکیج jenssegers/mongodb:
در این مرحله پکیج jenssegers/mongodb را نصب خواهیم کرد، برای اینکار دستور زیر را در خط فرمان وارد نمایید:
composer require jenssegers/mongodb
4- تعریف providers:
برای تعریف provider مربوط به پکیج به دایرکتوری config رفته، فایل app.php را باز کنید و کد زیر را در آرایه providers بصورت زیر وارد نمایید:
'providers' => [
Jenssegers\Mongodb\MongodbServiceProvider::class,
]
5- ایجاد یک مدل:
ما یک بنام Car خواهیم ساخت تا عمیلات CRUD را بر روی آن انجام دهیم، برای اینکار دستور زیر را در خط فرمان سیستم خود اجرا نمایید:
php artisan make:model Car
6- مدل مورد نظر ما قرار است از mongodb استفاده نمایید، برای همین باید نوع connection را در مدل تعریف کنیم، و همچنین مدل ما باید از Eloquent مربوط به MongoDB ارث بری کند، برای اینکار مدل خود را بصورت زیر تغییر می دهیم:
//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'
];
}
7- ایجاد view:
یک فایل بنام resources >> views >> carcreate.blade.php ساخته و کد زیر را در آن قرار دهید
<!-- 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>
8- یک کنترلر برای انجام عملیات دلخواه بصورت زیر بسازید:
php artisan make:controller CarController
9- فایل 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');
همانطور که می بینید این روت ها به کنترلر CarController که در مرحله قبل ساختیم متصل می باشند و عملیات create, read, update و delete را انجام می دهند.
10- فایل CarController.php را باز و متد create آن را بصورت زیر تغییر دهید:
//CarController.php
public function create()
{
return view('carcreate');
}
همچنین متد stoer که کار ذخیره سازی را انجام می دهد بصورت زیر تغییر دهید:
//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');
}
متد index که کار نمایش همه ردیف ها را بر عهده دارد را نیز بصورت زیر تغییر دهید:
public function index()
{
$cars=Car::all();
return view('carindex',compact('cars'));
}
به دایرکتوری resources >> views رفته و یک فایل جدید بنام carindex.blade.php ایجاد کنید و کدهای زیر را در آن قرار دهید:
<!-- 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>
متد edit را نیز بصورت زیر تغییر دهید:
public function edit($id)
{
$car = Car::find($id);
return view('caredit',compact('car','id'));
}
یک فایل دیگر بنام caredit.blade.php در دایرکتوری 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>
متد update را نیز بصورت زیر تغییر دهید:
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');
}
10- برای انجام عملیات Delete نیز متد delete را بصورت زیر تغییر دهید:
public function destroy($id)
{
$car = Car::find($id);
$car->delete();
return redirect('car')->with('success','Car has been deleted');
}
درنهایت فایل CarController.php شما باید بصورت زیر باشد:
//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');
}
}
حال میتوانید اپلیکیشن خود را serve و کدهای خود را تست کنید و از کار با mongodb لذت ببرید :)
البته فراموش نکنید که حتما باید mongodb در سیستم شما فعال باشد.
درصورتی که سوالی دارید از بخش نظرات ارسال کنید، خوشحال می شم جواب بدم :)
برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *
ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *