من دایکومنت لاراول نکاه میکنم اما چیزی راحغ به دستور create-- ندیدم میشه بگید کدام قسمت migration در لاراول 9 دستور ایجاد را گفته است؟
سلام، وقت به خیر ?
اینکه --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 اضافه کنید:
با اجرای دستور بالا لاراول حدس میزنه که شما قصد دارید ستون جدیدی به نام category_id به جدولی که موجود هست و نامش videos هست اضافه کنید و مجدد خودش محتویات رو طوری قرار میده که مناسب ویرایش جدول هست و نه ساخت جدول:
Schema::table('videos',function(){
})
به Schema::table دقت کنید.
در اینجا اگر شما نتونید نامی برای فایل Migrationتون استفاده کنید که لاراول بتونه نام جدول که میخواهید ویرایش کنید را حدس بزنه اون وقت باید از سوئیج --table استفاده کنید و خودتون به لاراول بگید نام جدولی که قصد دارم تغییر بدم videos هست.
اگر هم میخواهید سوئیچهای موجود در یک دستور را ببینید میتونید از دستور زیر استفاده کنید:
php artisan make:migration --help
با اجرای دستور فوق شما سوئیچ های
--create
و
--table
رو میتونید در لیست سوئیچهای این دستور ببینید.
موفق باشید ??
محمدحسن عاطفت۲۴ اردیبهشت ۱۴۰۱، ۰۶:۰۳
استاد فوق العاده بود توضیحاتتون. دو سوال که خیلی سرچ کردم جایی ندیدم ازتون داشتم
اگه بخواهیم چندتا ستون به جدول اضافه کنیم چطور باید از طریق artisan انجام داد
سوال دوم این هست که ایا میشه وقتی جدول ایجاد کرد همزمان دیتا وارد ان کرد یا حتماباید مدل هم داشته باشیبم به ازای هر جدول دیتا بیس؟
اخه کد زیر در stackoverflow درست هست اما برای من اجزا نمیشه.
kasra۲۴ اردیبهشت ۱۴۰۱، ۰۷:۲۹
خواهش میکنم ?
خب برای اینکه چندتا ستون به جدول دیتابیس اضافه کنید ۲ راه دارید:
1. اینکه بدونید دقیقا چندتا ستون میخواین اضافه کنید و نام هر ستون چی هست مثلا قصد داریم ۲ ستون به نامهای store_id و title به جدول products اضافه کنید. برای اینکار از دستور زیز استفاده میکنیم:
از سوئیچ table صرفا برای افزایش اطمینان از عملکر لاراول استفاده میکنیم.
و بعد داخل متد up ستون هاتون تعریف میکنید.
2. برای هر کدوم از ستون هاتون یک Migration ایجاد کنید.
روش دوم یک مزیت بسیار عالی داره، اینکه قابلیت کنترل کردن Rollback دارید و با یک Rollback یک مرحلهای چندین ستون از بین نمیره. ولی اینکه کدوم روش استفاده کنید به خودتون و پروژه و تیم و ... بستگی داره.
پاسخ سوال دومتون، استفاده از Seeding هست. پیشنهاد میکنم در مورد Seeding مطالعه داشته باشید. اگر به جواب نرسیدید مطرح کنید تا راهنماییتون کنم ??
محمدحسن عاطفت۲۴ اردیبهشت ۱۴۰۱، ۰۸:۵۸
فوق الغاده کامل بود استاد. ببخشید من سوالاتم اگه زیاده. چون واقعا برخی جاها درک نمیکنم میپرسم.
من seeder را میدونم استاد توضیح دادن. اما مگه seed برا دیتای فیک نیست؟ برای دیتای واقعی چطور است؟ استاد توضیح ندادن و نمیدونم کحا میشه پیدا کرد؟
و سوال دیگه اینکه میدونم برای هر جدول دیتابیس باید یک modelساخت. ایا حتما لازمه که کنترلر هم ساخته بشه یا مسقیما میشه از طریق route نمایش داد؟ چون اگه اینجور بشه خوب دلیل وحود کنترلر چی هست؟
kasra۲۴ اردیبهشت ۱۴۰۱، ۱۰:۰۵
خواهش میکنم
بابت تاخیر در پاسخگویی هم از خدمتتون عذرخواهی میکنم.
بله درست هست Seeder برای دیتای فیک هست ولی فکر میکنم که میتونه برای دادههای واقعی هم استفاده بشه.
من خودم هم از Seeder برای ورود اطلاعات اولیه به دیتابیس استفاده کردم و هم از Migration و حتی با استفاده از خود دیتابیس.
به هرحال این موضوع در یک تیکت دیگر مطرح کنید و حتما بفرمایید که استاد جواب بدن تا به جواب درست برسیم.
چون من هم سرچ کردم و به جواب واحدی نرسیدم و نمیخوام به اشتباه راهنماییتون کنم. پس این سوال مجدد مطرح کنید تا خود استاد جواب بدن و اینطور من هم به همراه شما یاد میگیرم :)
اما پاسخ سوال دومتون:
برای جداول اصلی که موجودیتهای اپلیکیشن ما درست میکنن مثل User، Products, Role و ... بله الزامیه. اما برای جداول واسط خیر.
و اینکه کنترل هم الزامیه به این دلیل که شما Logic اپلیکیشنتون در کنترلر قرار میدید و نه در مدلها. مثلا لاگین کاربران در کنترلر منطقش قرار داده میشه و نه در مدل.
و این نکته هم مهم هست که اشاره کنم که Routeها وظیفشون ارسال اطلاعات به کنترلر هست.
پیشنهاد میکنم حتما MVC مطالعه کنید. مطمئنا کمکتون خواهد کرد.