آموزش (CRUD )  با MongoDB  در لاراول

آموزش (CRUD ) با MongoDB در لاراول

همانگونه که می دانید CRUD  به معنی 4 فرایند اصلی کار با دیتابیس یعنی Create, Read, Update و Delete می باشد، ما در این آموزش قصد داریم این عملیات ها را با ایجاد یک کنترلر و روت های آن در دیتابیس MongoDb و در فریم وورک لاراول انجام دهیم....

همانگونه که می دانید 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 در سیستم شما فعال باشد.

 

درصورتی که سوالی دارید از بخش نظرات ارسال کنید، خوشحال می شم جواب بدم :) 


ارسال نظر

برای اطلاع از پاسخ به نظر شما می توانید ایمیل یا شماره موبایل خود را وارد نمایید. *

ایمیل و شماره موبایل شما کاملا مخفی خواهد ماند و در سایت نمایش داده نخواهد شد. *

اگر نظری برای این مطلب ارسال شد از طریق ایمیل مرا اطلاع بده!
لسیت نظرات
هنوز برای این مطلب نظری ارسال نشده است!