آموزش و نکات کار با Migration در لاراول
سلام همان طور که در پست های قبلی اشاره کرده بودم یک آموزش کامل از نحوه ایجاد و مدیریت دیتابیس توسط Migration در لاراول را
آماده کردم که خدمت همه عزیزان تقدیم می کنم :
Migration ها به شما این اجازه را می دهند که دیتابیس خود را بدون مراجعه به ابزارهای کمکی مثل phpmyadmin مدیریت کنید .
یعنی برای ایجاد و مدیریت جداول و همچنین تغییرات در بانک اطلاعاتی میتوانید از migration ها استفاده کنید .
با این روش شما دیگر احتیاجی به نوشتن دستورات Sql ندارید و از دستورات زیر برای طراحی و مدیریت بانک اطلاعاتی استفاده نماپید .
برای کار با دیتابیش از طریق Mygration Laravel ابتدا یک بانک اطلاعاتی در DBMS خود مثلا Mysql خود با ابزارهای مانند Phpmyadmin ایجاد نماپید . چرا که این روش برای همه دیتابیس های درگیر با لاراول قابل اجرا می باشد و صرفا برای Mysql نمی باشد .
بعد از ایجاد بانک اطلاعاتی به مسیر app/config/database.php بروید و کد زیر را ویرایش کنید
در صورتی که از Mysql استفاده می کنید :
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'نام دیتابیس ایجاد شده', 'username' => 'نام کاربری شما', 'password' => 'رمز عبور شما', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
سپس نوبت به ایجاد و مدیریت جداول بانک اطلاعاتی می رسد
در مرحله اول ابتدا یک mygration برای جدول مورد نظر ایجاد می کنیم مثلا جدولی با عنوان Posts
با اجرای این دستور در ترمینالو در شاخه اصلی پروژه خود میتوانید migration جدولی به اسم Posts ایجاد کنید :
php artisan migrate:make create_posts_table
به عبارت create_ در ابتدا و _table در انتهای نام جدول دقت نماپید که شما نیز در طراحی جداول می بایست از این عبارات در ابتدا و انتهای mygration استفاده نماپید .
بعد از وارد کردن دستور فوق یک فایل در آدرس app/database/migrations/ برای شما ایجاد می شود .
در فایل ایجاد شده عبارت زیر به صورت اتوماتیک ایجاد می شود .
class CreateTestTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { // قسمت اول } /** * Reverse the migrations. * * @return void */ public function down() { // قسمت دوم } }
در کد ایجاد شده دو قسمت می باشد که قسمت اولیه در مرحله صدا زدن مستقیم migration اجرا می شود و قسمت دوم در زمان صدا زدن به عنوان بازگشتی (rollback) استفاده می شوند .
حال برای ایجاد بانک اطلاعاتی از دستوراتی استفاده می کنیم که در این قسمت با یک مثال توضیح می دهم :
Schema::create('posts', function(Blueprint $table) { $table->bigIncrements('id'); $table->string('title'); $table->string('slug'); $table->text('content'); $table->string('type', 40)->index(); $table->bigInteger('user_id')->unsigned(); $table->boolean('is_published')->default(false); $table->timestamps(); $table->foreign('user_id')->references('id') ->on('users') ->onDelete('cascade') ->onUpdate('cascade'); $table->index(['title', 'slug']); });
bigIncrements : زمانی که بخواهیم یک فیلد با نوع عدد بزرک به صورت increment (شماره گذاری خود کار ) ایجاد کنیم .
string : برای زمانی که بخواهیم یک فیلد از نوع string ایجاد کنیم و در پارامتر دوم مقدار کاراکتر را وارد می کنیم .
text : زمانی که بخواهیم یک فیلد از نوع متن طولانی را ایجاد نماپیم .
integer : زمانی که بخواهیم یک فیلد از نوع عدد ایجاد نماپیم .
bigInteger : زمانی که بخواهیم یک فیلد از نوع عددبزرگ ایجاد نماپیم .
boolean : برای ایجاد فیلد های از نوع انتخابی true / false می باشد .
timestamps : برای ایحاد فیلد های زمانی کنترل زمان ارسال و مدیریت سطر های بانک اطلاعاتی می باشد .
برای ایجاد یک ارتباط (Relation) با جداول دیگر از کد foreign استفاده می کنیم که با references فیلد رابط و on نام جدول طرف دوم ارتباط را مشخص می کنیم onDelete و onUpdate مشخص می کنند که هنگام تغییرات روی سطر مبدا چه اتفاقی برای سطرهای سیار جدول ها که با جدول ارتباط دارند رخ دهد .
index : برای ایندکس کردن فیلد های جدول از این دستور استفاده می کنیم.
در مرحله بعد باید مشخص کنیم که در هنگام rollback یعنی قسمت دوم کد چه اتفاقی رخ بدهد به کد زیر دقت کنید :
Schema::drop('posts');
ما در اینجا مشخص کردیم که هنگام rollback جدول را کلا حذف نماید .
در مرحله بعد برای اجرای migraton های ایجاد شده از دستور زیر استفاده می شود :
php artisan migrate
برای بازگشت به تغییرات یک مرحله قبل می توانید از این دستور استفاده کنید:
php artisan migrate:rollback
و برای ریست کلی از این دستور :
php artisan migrate:reset
در پایان عرض کنم که لاراول به هیچ وجه شما را مجبور به استفاده از migration نمی کند و شما می توانید به همان روش های قبلی نیز بانک اطلاعاتی را ایجاد و مدیریت نماپید .
موفق باشید.
با سلام و خسته نباشید !!
یه سوال داشتم، میخوام سایتی دو زبانه طراحی کنم، یکی فارسی و دیگری انگلیسی، میخوام وقتی آدرس route مثلا شد /lang/fa صفحه اصلی سایت بصورت متون فارسی و اگر /lang/en بود صفحه اصلی سایت بصورت انگلیسی و همچنین کلیه متون از جمله اخبار، منوها و … نیز بصورت انگلیسی نمایش داده بشه .
اولا واسه ایجاد چنین چیزی چیکار باید کرد ؟
دوما من واسه ذخیره ی مثلا اخبار بصورت فارسی و انگلیسی در دیتابیس به ازای هرفیلد فارسی، یه فیلد واسه انگلیسی ذخیره کردم، آیا کارم درسته یا اشتباه و دوم اینکه اینکار بهینه هست و یا واسه استفاده از اون دچار مشکل مشوم یا نه !؟!!
باتشکر – محمد نمازی
سلام محمد جان ممنونم
من رویه در فریم ورک لاراول رو توضیح می دهم
کلن دو تا روش داریم برای چند زبانه کردن. یکی چند زبانه کردن رابط کاربری و یکی چندزبانه کردن رابط کاربری و محتوا
بهترین روش اینه که فقط رابط کاربریو دو زبانه کنیم ولی تو بعضی شرایط که محتوا هم قرار ترجمه بشه بهتره به جای اینکه برای هر زبان یه فیلد اضافه کنیم، از یک فیلد زبان(نوع زبان) استفاده کنیم
برای تشخیص زبان کاربر هم میتونیم از session، کوکی و دیتابیس برای ذخیره سازی نوع زبان استفاده کنیم و در هنگام لود صفحات مطالب بر اساس مقدار اون فیلد لود بشه یا اینکه بر اساس آدرس باشه که میتونیم زبان رو از آدرس تشخصی بدیم و مطالب مناسب اونو لود کنیم
البته تصمیم گرفتم یک آموزش کامل در این مورد بنویسم روی وبلاگ قرار بدم .
سلام مجدد،
ممنون از پاسخ و توجهتون
– راستش من طبق برنامه ریزی که واسه یادگیری لاراول کردم، خیلی عجله دارم و باید تا قبل از عید این مشکل رو حل کنم، ممنون میشم کمکم کنید .
– اگه امکان داره آدرس میلتون (خواهشا فعال) رو درج کنید .
– درصورت امکان شمارتونو به میلم ارسال کنید .
ممنون از لطفتون
سلام
محمد جان متاسفانه بسیار در گیر پروژه ها هستم
ولی قول می دم توی تعطیلات عید آموزش را آماده کنم
ایمیل من :
Ehsan . ebdali @ gmail.com
درود،
ممنون میشم میلتون رو چک کنید .
سلام مجدد و خسته نباشید !
چطوری میتونم اخبار مرتبط بهم و ایجاد یک خبرنامه در لاراول رو داشته باشم !!
با سپاس
سلام متشکرم
لطفا سوالتون رو با توضیحات بیشتری مطرح کنید
شما توی الگوریتم و منطق مشکل دارید یا پیاده سازی با لاراول
سلام دوست عزیز میشه بپرسم
name space چیه؟
سلام دوست عزیز
مطلب کاملی در این زمینه روی وبلاگ قرار دادم
به نظر من این واقعا احمقانست وقتی به راحتی میتونیم در phpmyadmin پایگاه داده و جداولمون رو درست کنیم بشینیم این دستورات مسخره ی لاراول رو حفظ کنیم.
شاید از نظر شما مسخره باشه ولی خیلیای دیگه روی استفاده از migrationها توافق دارن و به دردشون میخوره. قضیه فقط درست کردن یه Schema نیست، بلکه انتقال راحتتر، نسخه بندی راحتتر و در آخر توسعه راحتتره
به نظر من درست کردن دیتابیس داخل phpmyadmin خیلی سختتر هست یا حداقل زمانگیر تر. به عنوان مثال اگه ساخت یه جدول توی phpmyadmin پنج دقیقه طول بکشه، همون کار رو میشه با نوشتن چندخط کد و اجرا کردن دستور migratioin توی کمتر از یه دقیقه جدول رو ساخت.
نکتهی دیگهای که هست phpmyadmin فقط برای mysql هست ولی migration به RDMS خاصی وابسته نیست و میتونید برای RDMSهای دیگه مثل PostgreSQL و SQLServer جدول مورد نظرتون رو درست کنید