💻 آخرین فرصت یادگیری برنامه‌نویسی با آفر ویژه قبل از افزایش قیمت در ۵ آذر ماه (🎁 به همراه یک هدیه ارزشمند )
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ ابوالفض عباسپور
ساخت خودکار مدل
محسن موحد حل شده توسط محسن موحد

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

ولی الان من اومدم با لاراول 11 همچین چیزی نیست 
باید مدل رو  یه صورت دستی بسازم ؟
یا طور دیگه ای است؟

سلام،

مدل به‌صورت خودکار ساخته نشده، و خود مدرس توی سرفصل اول مدل Video رو خودشون ساختن.

چیزی که بعد از ایجاد فکتوری دیدی و مدرس هم بهش اشاره کرده، موضوع اضافه شدن مدل Video توی فایل فکتوری هست که مربوط به نسخه لاراوله. توی نسخه‌های قدیمی‌تر، اگه کلاس مدل وجود داشت، اسم مدل توی فکتوری درج می‌شد، ولی اگه مدل ساخته نشده بود، پراپرتی model برابر با Model::class قرار می‌گرفت. یعنی بر اساس اسم فکتوری، کلاس مدل رو تشخیص می‌داد. اما توی نسخه ۷ لاراول این کار از طریق آرگومان --model انجام می‌شد. توی نسخه‌های جدید همون قوانین قبلی هست، فقط به‌صورت پیش‌فرض، پراپرتی مدل حذف شده که درصورت نیاز، می‌تونی اضافه‌اش کنی.

در ادامه قوانین ساخت و استفاده از فکتوری رو میارم:

قدم 1: استفاده از HasFactory

کافیه صفت HasFactory رو به مدل‌مون اضافه کنیم. با این کار، متد استاتیک factory() به مدل اضافه می‌شه و می‌تونیم ازش برای تولید داده‌ها استفاده کنیم. مثلا وقتی می‌نویسیم Flight::factory()->create()، لاراول خودش می‌ره فکتوری مربوط به مدل Flight رو پیدا می‌کنه و یه نمونه می‌سازه.

قدم 2: کشف خودکار فکتوری‌ها

لاراول یه قرارداد نام‌گذاری داره که کمک می‌کنه خودش فکتوری‌ها رو پیدا کنه. مثلا:

  • همه فکتوری‌ها باید توی فضای نام Database\Factories باشن.
  • نام فکتوری باید شبیه اسم مدل باشه و با پسوند Factory تموم بشه. مثلاً اگه مدل ما Flight باشه، فکتوری باید FlightFactory نام‌گذاری بشه و تو مسیر database/factories/FlightFactory.php باشه.

اگه این نام‌گذاری رو رعایت کنی، لاراول به‌طور خودکار فکتوری رو پیدا می‌کنه و نیازی به تنظیمات اضافه نیست.

قدم 3: بازنویسی newFactory

حالا اگه بخوای فکتوری‌ها رو در مسیر یا با نام متفاوتی تعریف کنی، می‌تونی متد newFactory() رو توی مدل بازنویسی کنی. مثلاً:

use Database\Factories\Administration\FlightFactory;
protected static function newFactory()
{
    return FlightFactory::new();
}

اینطوری لاراول می‌فهمه که باید از فکتوری‌ای که توی Administration\FlightFactory هست استفاده کنه.

قدم 4: تعیین مدل در فکتوری

اگه نیاز باشه، باید توی فکتوری‌ها مشخص کنیم که این فکتوری به کدوم مدل مرتبطه. این کار رو با ویژگی protected $model انجام می‌دیم:

protected $model = Flight::class;

این ویژگی مشخص می‌کنه که این فکتوری برای مدل Flight ساخته شده.

جمع‌بندی:

  • با HasFactory می‌تونی به راحتی فکتوری‌ها رو به مدل‌هات اضافه کنی.
  • اگه قراردادهای نام‌گذاری رو رعایت کنی، لاراول خودش فکتوری‌ها رو پیدا می‌کنه.
  • اگه فکتوری یا مدل تو مسیر متفاوتیه، می‌تونی متد newFactory رو بازنویسی کنی.
  • اگه مدل تو مسیر پیش‌فرض باشه (مثل app/Models)، نیازی به تعریف protected $model نداری.
  • برای ساخت مدل می‌تونی از کامند make:model استفاده کنی و همزمان فکتوری رو هم بسازی. به لینک مستندات نگاه بنداز و کامندهای artisan برای model رو ببین.
بهترین پاسخ
محسن موحد ۰۱ مهر ۱۴۰۳، ۰۱:۱۳