۵ kasra
استفاده از Migration در ورژن 9
جامعه لاراول ایجاد شده در ۲۳ اردیبهشت ۱۴۰۱

باسلام

من دایکومنت لاراول نکاه میکنم اما چیزی راحغ به دستور create-- ندیدم میشه بگید کدام قسمت migration در لاراول 9 دستور ایجاد را گفته است؟

74f4-image.png

سلام، وقت به خیر ?

اینکه --create در Command فوق در داکیومنت لاراول وجود نداره دلیل بر این نیست که کلا وجود نداشته باشه. حرف شما درست هست. این آپشن در داکیومنت لاراول وجود نداره ولی چرا؟

ببینید، لاراول اون متنی که شما به عنوان نام فایل در

php artisan make:migration

بهش میدید بررسی میکنه و اگه از یک قاعده درست پیروی کنه خودش سعی میکنه نام جدولی که شما میخواهید بسازید را حدس بزنه و در Schema قرار بده. مثلا

php artisan make:migration create_videos_table

وقتی شما دستور بالا اجرا میکنید لاراول به راحتی حدس میزنه شما قصد دارید یک جدول به نام videos بسازید و حالا محتویات داخل فایل رو براتون طوری قرار میده که برای ساخت جدول هست:

Schema::create('videos',function(){
})

به Schema::create دقت کنید.

در اینجا اگر شما نتونید نامی برای فایل Migrationتون استفاده کنید که لاراول بتونه نام جدول که میخواهید بسازید را حدس بزنه اون وقت باید از سوئیج --create استفاده کنید و خودتون به لاراول بگید نام جدول videos هست.

ولی حالا فکر کنید که شما قصد دارید یک ستون به جدول videos اضافه کنید:

php artisan make:migration add_category_id_column_to_videos_table

با اجرای دستور بالا لاراول حدس میزنه که شما قصد دارید ستون جدیدی به نام category_id به جدولی که موجود هست و نامش videos هست اضافه کنید و مجدد خودش محتویات رو طوری قرار میده که مناسب ویرایش جدول هست و نه ساخت جدول:

Schema::table('videos',function(){
})

به Schema::table دقت کنید.

در اینجا اگر شما نتونید نامی برای فایل Migrationتون استفاده کنید که لاراول بتونه نام جدول که میخواهید ویرایش کنید را حدس بزنه اون وقت باید از سوئیج --table استفاده کنید و خودتون به لاراول بگید نام جدولی که قصد دارم تغییر بدم videos هست.

اگر هم میخواهید سوئیچ‌های موجود در یک دستور را ببینید میتونید از دستور زیر استفاده کنید:

php artisan make:migration --help

با اجرای دستور فوق شما سوئیچ های

--create

و

--table

رو میتونید در لیست سوئیچ‌های این دستور ببینید.

موفق باشید ??

محمدحسن عاطفت ۲۴ اردیبهشت ۱۴۰۱، ۰۶:۰۳

استاد فوق العاده بود توضیحاتتون. دو سوال که خیلی سرچ کردم جایی ندیدم ازتون داشتم

اگه بخواهیم چندتا ستون به جدول اضافه کنیم چطور باید از طریق artisan انجام داد

سوال دوم این هست که ایا میشه وقتی جدول ایجاد کرد همزمان دیتا وارد ان کرد یا حتماباید مدل هم داشته باشیبم به ازای هر جدول دیتا بیس؟

اخه کد زیر در stackoverflow درست هست اما برای من اجزا نمیشه.

14c6-image.png

kasra ۲۴ اردیبهشت ۱۴۰۱، ۰۷:۲۹

خواهش میکنم ?

خب برای اینکه چندتا ستون به جدول دیتابیس اضافه کنید ۲ راه دارید:

1. اینکه بدونید دقیقا چندتا ستون میخواین اضافه کنید و نام هر ستون چی هست مثلا قصد داریم ۲ ستون به نام‌های store_id و title به جدول products اضافه کنید. برای اینکار از دستور زیز استفاده میکنیم:

php artisan make:migration add_user_id_and_title_to_products_table --table="products"

از سوئیچ table صرفا برای افزایش اطمینان از عملکر لاراول استفاده میکنیم.

و بعد داخل متد up ستون هاتون تعریف می‌کنید.


2. برای هر کدوم از ستون هاتون یک Migration ایجاد کنید.


روش دوم یک مزیت بسیار عالی داره، اینکه قابلیت کنترل کردن Rollback دارید و با یک Rollback یک مرحله‌ای چندین ستون از بین نمیره. ولی اینکه کدوم روش استفاده کنید به خودتون و پروژه و تیم و ... بستگی داره.


پاسخ سوال دومتون، استفاده از Seeding هست. پیشنهاد میکنم در مورد Seeding مطالعه داشته باشید. اگر به جواب نرسیدید مطرح کنید تا راهنماییتون کنم ??

محمدحسن عاطفت ۲۴ اردیبهشت ۱۴۰۱، ۰۸:۵۸

فوق الغاده کامل بود استاد. ببخشید من سوالاتم اگه زیاده. چون واقعا برخی جاها درک نمیکنم میپرسم.

من seeder را میدونم استاد توضیح دادن. اما مگه seed برا دیتای فیک نیست؟ برای دیتای واقعی چطور است؟ استاد توضیح ندادن و نمیدونم کحا میشه پیدا کرد؟


و سوال دیگه اینکه میدونم برای هر جدول دیتابیس باید یک modelساخت. ایا حتما لازمه که کنترلر هم ساخته بشه یا مسقیما میشه از طریق route نمایش داد؟ چون اگه اینجور بشه خوب دلیل وحود کنترلر چی هست؟

kasra ۲۴ اردیبهشت ۱۴۰۱، ۱۰:۰۵

خواهش میکنم

بابت تاخیر در پاسخگویی هم از خدمتتون عذرخواهی میکنم.

بله درست هست Seeder برای دیتای فیک هست ولی فکر میکنم که میتونه برای داده‌های واقعی هم استفاده بشه.

من خودم هم از Seeder برای ورود اطلاعات اولیه به دیتابیس استفاده کردم و هم از Migration و حتی با استفاده از خود دیتابیس.

به هرحال این موضوع در یک تیکت دیگر مطرح کنید و حتما بفرمایید که استاد جواب بدن تا به جواب درست برسیم.

چون من هم سرچ کردم و به جواب واحدی نرسیدم و نمیخوام به اشتباه راهنماییتون کنم. پس این سوال مجدد مطرح کنید تا خود استاد جواب بدن و اینطور من هم به همراه شما یاد میگیرم :)


اما پاسخ سوال دومتون:

برای جداول اصلی که موجودیت‌های اپلیکیشن ما درست میکنن مثل User، Products, Role و ... بله الزامیه. اما برای جداول واسط خیر.

و اینکه کنترل هم الزامیه به این دلیل که شما Logic اپلیکیشنتون در کنترلر قرار میدید و نه در مدلها. مثلا لاگین کاربران در کنترلر منطقش قرار داده میشه و نه در مدل.

و این نکته هم مهم هست که اشاره کنم که Routeها وظیفشون ارسال اطلاعات به کنترلر هست.

پیشنهاد میکنم حتما MVC مطالعه کنید. مطمئنا کمکتون خواهد کرد.

بهترین پاسخ
محمدحسن عاطفت ۲۴ اردیبهشت ۱۴۰۱، ۱۸:۳۰