تعداد بازدید: 1200

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

 

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Database Migrations

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *