برنامه نویسی با محبوب ترین فریم ورک پی اچ پی#7

برنامه نویسی با محبوب ترین فریم ورک پی اچ پی#7
Migration  به منظور مدیریت جداول در لاراول هست و به شما این امکان رو می ده که حتی با داشتن دانشی اندک درخصوص مدیریت دیتابیس و پایگاه داده بتونید بانک اطلاعاتی پروژه خودتون رو ایجاد کنید. برای یاد گیری این مبحث با ما همراه باشید.
دارالترجمه رسمی
دارالترجمه رسمی پارسیس شامل خدمات ترجمه رسمی و تخصصی در بیش از 60 زبان زنده دنیا
افزونه های سئو وردپرس
بهترین افزونه های سئو وردپرس به صورت کاملا فارسی
مشاوره و خدمات سئو
آژانس تخصصی "انجام سئو"؛ ارائه خدمات حرفه ای سئو سایت
افزونه فرم ساز آسان
فرم ساز آسان اولین فرم ساز کاملا فارسی وردپرس
خرید ورق گالوانیزه رنگی
خرید انواع ورق گالوانیزه رنگی با بهترین قیمت
افزونه ورود به سبک دیوار
ورود و ثبت نام به سبک دیوار در وردپرس با افزونه ایرانی و فارسی دکتر لاگین
خودتان را اینجا معرفی کنید

پس از ورود به فولدر پروژه به دایرکتوری database/migrations برید . همانطور که قابل مشاهده هست ، خود لاراول به صورت پیش فرض دو migration برای جدول users که حاوی اطلاعات کاربران و password_resset که به منظور استفاده از تغییر کلمه عبور در هنگام فراموشی رمز عبور رو ارائه کرده است.
وارد migration جدول users شوید، همانطور که مشاهده می کنید هر migtation  از دو متد up  که برای ایجاد جداول و down  که برای حذف جداول هست تشکیل شده است.
در متد up اولین مقدار ورودی نام جدول و دومین مقدار ورودی استفاده از کلاس Blueprint جهت ایجاد فیلد ها در جدول می باشد.
در migration جدول users یک فیلد id  به صورت auto increment  ، یک فیلد با نام name به صورت رشته برای ذخیره نام کاربر، یک فیلد email  به صورت رشته و منحصر بفرد برای هر کاربر به منظور ثبت ایمیل، فیلد password  به صورت رشته 60 کاراکتری جهت ثبت کلمه عبور کاربر، فیلد remember_token جهت ثبت اطلاعات مربوط به ورود کاربر در سیستم و دو فیلد created_at و utdated_at  که همان طور که از نامهایشان پیداست به منظور زمان ایجاد و زمان انجام تغییرات بر روی رکورد ایجاد شده است.

ایجاد migration

برای ایجاد یک migration کافیست که از طریق ترمینال خود به پوشه برنامه رفته و دستور زیر را وارد نمائید:
php artisan make:migration create_flights_table --create=flights
پس از اجرای دستور فوق migration جدول flights در دایرکتوری migration ایجاد شده است که برای اضافه کردن فیلد های جدول می توانید از توضیحات جدول زیر استفاده کنید:
 
Command Description
$table->bigIncrements('id'); Incrementing ID (primary key) using a "UNSIGNED BIG INTEGER" equivalent.
$table->bigInteger('votes'); BIGINT equivalent for the database.
$table->binary('data'); BLOB equivalent for the database.
$table->boolean('confirmed'); BOOLEAN equivalent for the database.
$table->char('name', 4); CHAR equivalent with a length.
$table->date('created_at'); DATE equivalent for the database.
$table->dateTime('created_at'); DATETIME equivalent for the database.
$table->decimal('amount', 5, 2); DECIMAL equivalent with a precision and scale.
$table->double('column', 15, 8); DOUBLE equivalent with precision, 15 digits in total and 8 after the decimal point.
$table->enum('choices', ['foo', 'bar']); ENUM equivalent for the database.
$table->float('amount'); FLOAT equivalent for the database.
$table->increments('id'); Incrementing ID (primary key) using a "UNSIGNED INTEGER" equivalent.
$table->integer('votes'); INTEGER equivalent for the database.
$table->json('options'); JSON equivalent for the database.
$table->jsonb('options'); JSONB equivalent for the database.
$table->longText('description'); LONGTEXT equivalent for the database.
$table->mediumInteger('numbers'); MEDIUMINT equivalent for the database.
$table->mediumText('description'); MEDIUMTEXT equivalent for the database.
$table->morphs('taggable'); Adds INTEGER taggable_id and STRING taggable_type.
$table->nullableTimestamps(); Same as timestamps(), except allows NULLs.
$table->rememberToken(); Adds remember_token as VARCHAR(100) NULL.
$table->smallInteger('votes'); SMALLINT equivalent for the database.
$table->softDeletes(); Adds deleted_at column for soft deletes.
$table->string('email'); VARCHAR equivalent column.
$table->string('name', 100); VARCHAR equivalent with a length.
$table->text('description'); TEXT equivalent for the database.
$table->time('sunrise'); TIME equivalent for the database.
$table->tinyInteger('numbers'); TINYINT equivalent for the database.
$table->timestamp('added_on'); TIMESTAMP equivalent for the database.
$table->timestamps(); Adds created_at and updated_at columns.
$table->uuid('id'); UUID equivalent for the database.

من برای ایجاد فیلد در migration جدول flights از دستورات زیر استفاده کرده ام
$table->increments('id');
$table->string('name');
$table->string('airline');
$table->timestamps();
اولین دستور برای ایجاد یک فیلد auto increment با نام id  می باشد. دومین دستور برای ایجاد یک فیلد از نوع رشته با نام name جهت نگهداری نام ، سومین فیلد از نوع رشته جهت نگهداری نام airline هست. اگر که شما خواستید که جدول شما دارای دو فیلد created_at و updated_at باشد می بایست از دستور چهارم در متد up  استفاده کنید.
حال به ترمینال خود بازگشته و دستور زیر را وارد نمائید:
php artisan migrate
حالا به بانک اطلاعاتی خود بروید، همانطور که مشاهده می کنید چهار جدول flights,users,password_resset و migration ایجاد شده است.لازم به توضیح است که جدول migration جهت نگهداری آخرین تغییرات migration ها می باشد.

اضافه کردن فیلد به جداول با استفاده از migration

 برای اضافه کردن فیلد به migration ها مشابه دستور زیر در ترمینال خود استفاده کنید:
php artisan make:migration add_votes_to_users_table --table=users
دستور فوق فیلد votes رو به جدول users اضافه می کند.

بررسی وجود جدول و یا فیلد در migration

درصورتی که شما بخواهید در migration پس از بررسی وجود جدول در بانک اطلاعاتی نسبت به ایجاد آن اقدام نمائید، می توانید مشابه دستور زیر عمل کنید:
if (Schema::hasTable('users')) {
    //
}

if (Schema::hasColumn('users', 'email')) {
    //
}

تغییر نام و حذف جداول در migration
 

درصورتیکه در پروژه خود احتیاج به تغییر نام جداول داشتید و یا خواستید که جدول رو حذف کنید می تونید از دستورات زیر استفاده کنید:
Schema::rename($from, $to);
Schema::drop('users');
Schema::dropIfExists('users');

ایجاد مقدار پیش فرض برای فیلدها در جداول

گاهی اوقات ممکن است برخی فیلدها در جداول مقداری رو در هنگام ایجاد رکورد به صورت پیش فرض در خود ذخیره کنند. درصورتیکه شما هم نیاز به چنین فیلدی داشتید، از دستور زیر استفاده کنید:
Schema::table('users', function ($table) {
    $table->string('email')->default($value);
});
شاید هم نیازمند خالی بودن مقدار فیلد در زمان ایجاد رکورد جدید باشید. دراین صورت هم از این روش استفاده کنید:
Schema::table('users', function ($table) {
    $table->string('email')->nullable();
});

تغییر نام و یا حذف فیلدهای جداول در migration

در طول توسعه یک پروژه گاهاً پیش میاد که باید تغییراتی در فیلدهای جداول ایجاد کنید و یا نام اونها رو تغییر بدید، این امکان نیز از طریق migration ها ایجاد شده که اگر شما هم خواستید تغییراتی رو روی فیلدها اعمال کنید از روش زیر استفاده کنید:
Schema::table('users', function ($table) {
    $table->renameColumn('from', 'to');
});
Schema::table('users', function ($table) {
    $table->dropColumn('votes');
});
Schema::table('users', function ($table) {
    $table->dropColumn(['votes', 'avatar', 'location']);
});

ایجاد و یا حذف فهرست ها در جداول

در migration ها امکان اضافه کردن فیلدهایی با شرایط کلید اصلی، منحصربه فرد بودن، فهرست شدن و ... وجود دارد که برای ایجاد آن می بایست به صورت زیر عمل شود:
 
Command Description
$table->primary('id'); Add a primary key.
$table->primary(['first', 'last']); Add composite keys.
$table->unique('email'); Add a unique index.
$table->index('state'); Add a basic index.
و برای حذف اونها هم از دستورات زیر استفاده کنید:
 
Command Description
$table->dropPrimary('users_id_primary'); Drop a primary key from the "users" table.
$table->dropUnique('users_email_unique'); Drop a unique index from the "users" table.
$table->dropIndex('geo_state_index'); Drop a basic index from the "geo" table.

موفق و پیروز باشید.

محمد دارای مدرک کارشناسی نرم افزار است و به عنوان توسعه‌دهنده نرم‌افزار وب و طراح رابط کاربری در دپارتمان تکنولوژی اطلاعات سازمان خدمات پس از فروش سایپا مشغول بکار می باشد. از سال 88 برنامه نویسی را با زبانهای گروه C شروع کرده و از سال 91 به سمت برنامه نویسی و طراحی وب رفت. وی هم اکنون درحال توسعه اپلیکیشن های موبایل با زبان swift است.

نظرات و سوالات کاربران

ارسال پاسخ بردیا راستین
بردیا راستین
دوشنبه ۰۱ شهریور ۱۳۹۵ ۲۲:۰۸
بسیار عالی و مفیده ... حتما ادامه بدید که بدجوری پی گیریم ... :)