Database Migrations
migration یک کنترل ورژن برای پایگاه داده اپلیکیشن شماست. اگر تمامی روال های پایگاه داده را مطابق با استاندارد های آن جلو ببرید به پایگاه داده خود نیز ورژن دارید .
فرض کنید به ازای اجرای دستور migrate پایگاه داده های مربوط به این command به اجرا در می آید . مثلا از صفر در step اول جدول products ساخته می شود. بعد جدول orders به ازای گام بعدی و اجرای دستور migrate ساخته می شود که می شود step دوم.
حال شما قابلیت این را دارید که به step های قبل از پایگاه داده بروید و رفتاری مثل version controlling را با پایگاه داده های خود داشته باشید شمای کلی از دستورات migrate را در زیر مشاهده می کنید:
- migrate : رفتن به آخرین پایگاه داده ساخته شده.
- rollback : رفتن به یک گام قبل تر
- reset : رفتن به اولین حالت (حالت صفر)
- refresh : رفتن به اولین حالت و بعد به آخرین حالت (ترکیب reset و migrate)
Create the migration
برای ساخت migration قطعه کد زیر را وارد کنید :
php artisan make:migration create_products_table
همان طور که می بینید در قطعه کد بالا ما برای نامگذاری migration از قاعده خاصی پیروی کردیم:
- کلمه create در ابتدا برای اینکه بفهمانیم داریم جدول میسازیم.
- نام جدول که در اینجا برابر با products می باشد.
- table که به معنای جدول می باشد.
مثلا برای ساخت جدول مثلا با نام orders می توان از عبارت create_orders_table استفاده کرد. به قاعده گفته شده Laravel Naming Convention گفته می شود.
پس از اجرای قطعه کد بالا migration در مسیر database/migrations
ساخته می شود. هر فایل migration دارای یک timestamp در انتهای نام خود است که توسط لاراول جهت مرتب سازی فایل ها استفاده می شود.
نکته : در صورتی که laravel naming convention پیش فرض لاراول استفاده نکنیم باید نام جدول را طی یک option با نام --create
به make:migrate
بدهیم تا متد های مربوطه (up , down) را برای ما در فایل بسازد.
php artisan make:migration products --create=products
اگر به به درستی migration را ساخته باشیم چنین کلاسی در فایل migration ما وجود خواهد داشت.
<?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->increments('id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('products'); } }
متد up
برای زمانی است که migration اقدام به ساخت می کند (معمولا در دستورات migrate)
متد down
برای زمانی است که migration اقدام به تخریب می کند (معمولا در دستور های reset , rollback)
تکمیل جدول migration با Schema
در هر migration ماژول Illuminate\Support\Facades\Schema
برای ساخت جدول مربوط و همچنین ماژول Illuminate\Database\Schema\Blueprint
برای تنظیم ستون ها و روابط جدول import شده است.
برای ساخت و تنظیم های ستون های هر جدول باید با متد های Bluprint table آشنا باشید.
Command | Description |
---|---|
$table->increments('id'); |
Auto-incrementing UNSIGNED INT (primary key) – در صورتی که مقدار id به عنوان پارامتر نام بهش بدیم میشه به عنوان کلید اصلی اون رو استفاده کرد. |
$table->bigIncrements('id'); |
Auto-incrementing UNSIGNED BIGINT (primary key) – دقیقا مثل مورد قبل فقط با اندازه بزرگتر |
$table->unsignedInteger(); |
این یک فیلد UNSIGNED INT میده که ساختاری مثل increments داره . پس از این رو برای فیلد کلید های خارجی از این مورد استفاده می کنیم. زمانی که فیلد کلید اصلی INT باشه(یعنی باید اندازه های PK و FK یکسان باشد). |
$table->boolean(); |
BOOLEAN – صفر یا یک |
$table->string(); |
VARCHAR – اندازه را می توان به عنوان پارامتر دوم به متد داد. |
$table->integer(); |
INTEGER – این متد مشتقات زیادی داره نظیر bigInteger , mediumInteger , smallInteger , … که هر کدوم اندازه های متفاوتی داره. |
$table->timestamps(); |
مقدار timestamp در ستون ذخیره میشه. معمولا created_at , updated_at به صورت پیش فرض در اون وجود داره ، یعنی زمانی که این کد را وارد کنید دو فیلد updated_at و created_at ساخته می شود. |
$table->longText(); |
LONGTEXT – برای قرار گیری محتواهای طولانی نظیر توضیحات بدنه. |
نکته مهم : به طور کلی شما فیلد $table->timestamps();
را به صورت دو فیلد created_at , updated_at بدانید. در جاهای دیگری نیز فراخوانی این دو با همین method یعنی timestamp شناخته می شود. زمان ساخته شدن row و زمان بروزرسانی آن.
انتخاب کلید اصلی (PK) برای جدول به صورت خودکار همان فیلدی است که از $table->bigIncrements('id');
استفاده کرده است.
شما با متد primary
می توانید کلید اصلی را تعیین نمایید.
<?php $table->primary('id');
نکته مهم : زمانی که فیلدی را به شکل زیر تعریف کنید دیگر نیازی به معرفی primary key با روش بالا نخواهید داشت.
$table->increments('id');
برای انتخاب کلید خارجی (FK) از کد $table->foreign('user_id')->references('id')->on('users');
استفاده می کنیم و برای محدودیت ها (Constraints) هم متد های onDelete و onUpdate را داریم که یکی از مقدار های CASCADE , SET NULL , NO ACTION , RISTRICT را می گیرد.
<?php $table->foreign('user_id') ->references('id')->on('users') ->onDelete('cascade') ->onUpdate('cascade');
در مثال بالا کلید user_id به عنوان کلید خارجی متصل به کلید id از جدول user انتخاب شد که محدودیت cascade برای عملگر delete , update برای آن انجام شد.
افزودن ویژگی به ستون های جدول : اگر خاطر داشته باشید هر ستون از هر جدول ویژگی هایی نظیر NOT NULL , AUTO_INCREMENT , DEFAULT را تعیین می کردیم که در لاراول هم متدهایی معادل آن ها داریم.
Modifier | Description |
---|---|
->nullable($value = true) |
مقدار true , false می گیرد و تعیین می کند ستون قابلیت گرفتن مقدار NULL را دارد یا خیر |
->default($value) |
مقدار پیش فرض ستون را تعیین می گرداند. |
->autoIncrement() |
ستون را AUTO INCREMENT می گرداند. |
->charset('utf8') |
تعیین characeter set |
->collation('utf8_unicode_ci') |
تعیین collate |
با مراجعه به وبسایت لاراول می توانید تمامی Column Modifiers را مشاهده بفرمایید.
Run the migrations
تا الان ما فقط migration را ساخته ایم و هنوز جدولی از migration در پایگاه داده ساخته نشده است. برای ساخته شدن جدول باید آن را به اجرا در آوریم :
php artisan migrate
Reverse the migrations
برای برگشت به وضعیت های migration های قبلی می توانیم از rollback , reset , refresh استفاده کرد.
rollback : بازگشت به حالت قبل .
#one step rollback php artisan migrate:refresh #multistep rollback php artisan migrate:refresh --step=5
این فرمان option با نام --step
میگیرد که تعیین می کند به چند مرحله قبل برود. مقدار پیش فرض یک است اگر این option را نگذاریم.
reset : این مقدار پایگاه داده را به حالت اول می برد.
php artisan migrate:reset
refresh : معادل یک rollback و یک migrate است :
php artisan migrate:refresh
Migration Remove
برای حذف یک migration مراحل زیر را طی کنید:
- حذف دستی فایل migration در مسیر
app/database/migrations/my_migration_file_name.php
- بازنشانی فایل autoload در composer با اجرای فرمان
composer dump-autoload
دیدگاهتان را بنویسید