عملیات CRUD با لاراول 5.8 ، همانطور که میدانید ایجاد (create) ، خواندن (Read) ، به روز رسانی (Update) و حذف (Delete) یا CRUD چهار توابع اساسی ذخیره سازی پایدار یا مداوم هستند. در این ساعت از تجاری اپ قصد داریم عملیات CRUD را برای لاراول 5.8 به شما آموزش دهیم. آموزش عملیات CRUD با لاراول 5.8 به صورت ساده و مناسب برای مبتدیان می باشد. با ما همراه باشید.
مراحل ذکر شده در پایین را دنبال کنید :
برای شروع باید یک پروژه جدید لاراول را نصب کنیم.قبل از نصب باید مطمئن شوید سرور شما این نیازمندی ها رو داشته باشد:
به پوشه پروژه خودتون برید (به عنوان مثال ، برای xampp به پوشه htdocs) و دستور زیر را برای ایجاد یک پروژه در ترمینال خود بنویسید.
composer create-project –prefer-dist laravel/laravel laravelcrud
در پروژه لاراول یک فایل با نام .env وجود دارد ، این فایل برای پیکربندی پروژه است. برای اتصال به پایگاه داده ما باید تظیمات لازم پایگاه داده را انجام دهیم.
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravelcrud
DB_USERNAME=root
DB_PASSWORD=pasword
برای مدیریت خطای specified key was too long ، به این فایل بروید: laravelcrud / app / Providers / AppServiceProvider.php و در داخل متد boot مقدار زیر را قرار دهید:
use Illuminate\Support\Facades\Schema;
public function boot()
{
Schema::defaultStringLength(191);
}
به عنوان مثال برای آموزش عملیات CRUD با لاراول 5.8 من محصولات را در نظر گرفته ام.برای ایجاد جدول محصولات (products) دستور زیر را اجرا کنید.
php artisan make:migration create_products_table –create=products
خروجی ترمینال را در تصویر زیر می بینید:
ما با موفقیت جدول products را ایجاد کردیم. حالا به مسیر “”database/migrations در پروژه لاراول بروید ، در این بخش شما می توانید فایل migration را برای ایجاد جدول products مشاهده کنید.
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProductsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('products', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('price');
$table->text('detail');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('products');
}
}
اکنون دستور زیر را برای migrate کردن این migrations اجرا کنید:
php artisan migrate
خروجی ترمینال:
در این مرحله ما یک کنترلر به نام ProductController و یک مدل با نام Product ایجاد خواهیم کرد.دستور زیر را اجرا کنید تا کنترلر و مدل شما ایجاد شوند.
php artisan make:controller ProductController –resource –model=Product
مدل Product و ProductController ایجاد شدند.فایل app/Product.php را باز کنید و کدهای زیر را در آن بنویسید.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Product extends Model
{
protected $fillable = [
'name', 'price', 'detail'
];
}
فایل ProductController را به صورتی که در زیر می بینید ویرایش کنید.برای رفتن به این فایل باید مسیر app/Http/Controllers/ProductController.php بروید.در این فایل شما ۷ تابع رو می بینید که باید آن ها را مانند زیر ویرایش کنید
<?php
namespace App\Http\Controllers;
use App\Product;
use Illuminate\Http\Request;
class ProductController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$products = Product::latest()->paginate(5);
return view('products.index',compact('products'))
->with('i', (request()->input('page', 1) - 1) * 5);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('products.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$request->validate([
'name' => 'required',
'price' => 'required',
'detail' => 'required',
]);
Product::create($request->all());
return redirect()->route('products.index')
->with('success','محصول با موفقیت افزوده شد.');
}
/**
* Display the specified resource.
*
* @param \App\Product $product
* @return \Illuminate\Http\Response
*/
public function show(Product $product)
{
return view('products.show',compact('product'));
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Product $product
* @return \Illuminate\Http\Response
*/
public function edit(Product $product)
{
return view('products.edit',compact('product'));
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Product $product
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Product $product)
{
$request->validate([
'name' => 'required',
'price' => 'required',
'detail' => 'required',
]);
$product->update($request->all());
return redirect()->route('products.index')
->with('success','محصول با موفقیت بروزرسانی شد.');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Product $product
* @return \Illuminate\Http\Response
*/
public function destroy(Product $product)
{
$product->delete();
return redirect()->route('products.index')
->with('success','محصول با موفقیت حذف شد!');
}
}
فایل web.php را در مسیر “routes/web.php” باز کنید و یک resource route برای Product ایجاد کنید.
<?php
Route::get('/', function () {
return view('welcome');
});
Route::resource('products','ProductController');
به دایرکتوری resources/views بروید و یک پوشه به نام products ایجاد کنید بعد وارد این پوشه شوید و ۵ فایلی که در ادامه آورده شده است را ایجاد کنید و کدهای هر کدام را در آن ها بنویسید.
فایل layout.blade.php
<!DOCTYPE html>
<html>
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>آموزش CRUD با لاراول ۵٫۸</title>
<!-- Bootstrap CSS -->
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet">
</head>
<body style="direction: rtl;text-align: right;">
<div class="container">
<div class="text-center" style="margin: 50px 0 50px 0;"><a href="{{url("products")}}"><img
src="{{asset("images/logo.png")}}" alt="Logo"></a><br>آموزش CRUD با لاراول ۵٫۸
</div>
@yield('content')
</div>
</body>
</html>
فایل index.blade.php
@extends('products.layout')
@section('content')
<div class="row" style="margin-bottom: 20px;">
<div class="col-lg-12 margin-tb">
<div class="pull-right">
<h3>محصولات</h3>
</div>
<div class="pull-left" style="text-align: left;">
<a class="btn btn-success" href="{{ route('products.create') }}">افزودن محصول</a>
</div>
</div>
</div>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th>شناسه</th>
<th>نام</th>
<th>قیمت</th>
<th>جزئیات</th>
<th width="280px">عملیات</th>
</tr>
@foreach ($products as $product)
<tr>
<td>{{ $product->id }}</td>
<td>{{ $product->name }}</td>
<td>{{ $product->price }}</td>
<td>{{ $product->detail }}</td>
<td>
<form action="{{ route('products.destroy',$product->id) }}" method="POST">
<a class="btn btn-info" href="{{ route('products.show',$product->id) }}">نمایش</a>
<a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">ویرایش</a>
@csrf
@method('DELETE')
<button type="submit" class="btn btn-danger">حذف</button>
</form>
</td>
</tr>
@endforeach
</table>
{!! $products->links() !!}
@endsection
فایل create.blade.php
@extends('products.layout')
@section('content')
<div class="row" style="margin-bottom: 20px;">
<div class="col-lg-12 margin-tb">
<div class="pull-right">
<h3>افزودن محصول</h3>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<strong>متاسفیم!</strong> در ورودی های شما مشکلاتی وجود داشت!<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('products.store') }}" method="POST">
@csrf
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>نام:</strong>
<input type="text" name="name" class="form-control">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>قیمت:</strong>
<input type="text" name="price" class="form-control">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>جزئیات:</strong>
<textarea class="form-control" style="height:150px" name="detail"></textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-success">محصول</button>
</div>
</div>
</form>
@endsection
فایل edit.blade.php
@extends('products.layout')
@section('content')
<div class="row" style="margin-bottom: 20px;">
<div class="col-lg-12 margin-tb">
<div class="pull-right">
<h3>ویرایش محصول</h3>
</div>
</div>
</div>
@if ($errors->any())
<div class="alert alert-danger">
<strong>متاسفیم!</strong> در ورودی های شما مشکلاتی وجود داشت!<br><br>
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<form action="{{ route('products.update',$product->id) }}" method="POST">
@csrf
@method('PUT')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>نام:</strong>
<input type="text" name="name" value="{{ $product->name }}" class="form-control">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>قیمت:</strong>
<input type="text" name="price" value="{{ $product->price }}" class="form-control">
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>جزئیات:</strong>
<textarea class="form-control" style="height:150px" name="detail">{{ $product->detail }}</textarea>
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12 text-center">
<button type="submit" class="btn btn-success">بروز رسانی</button>
</div>
</div>
</form>
@endsection
فایل show.blade.php
@extends('products.layout')
@section('content')
<div class="row" style="margin-bottom: 20px;">
<div class="col-lg-12 margin-tb">
<div class="pull-right">
<h3>نمایش محصول</h3>
</div>
</div>
</div>
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>نام:</strong>
{{ $product->name }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>قیمت:</strong>
{{ $product->price }}
</div>
</div>
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group">
<strong>جزئیات:</strong>
{{ $product->detail }}
</div>
</div>
</div>
@endsection
برنامه CRUD با لاراول ما آماده است.کافیست برنامه رو با دستور زیر اجرا کنید
php artisan serve
و درانتها آدرس پروژه خود را در مرورگر وارد کرده و پروژه عملیات ایجاد ، خواندن ، به روزرسانی و حذف با لاراول را مشاهده نمایید.
http://localhost/laravelcrud:8000/products
تصویر زیر صفحه اصلی و نهایی پروژه عملیات CRUD با لاراول می باشد که شما باد آن را در مرورگر خود مشاهده نمایید.