🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ محمدرسول اصغری
اجرا نشدن دستور factory
جامعه لاراول ایجاد شده در ۲۶ تیر ۱۴۰۲

سلام وقتتون بخیر باشه

بنده حین استفاده از پکیج faker به این ارور بر میخورم ممنون میشم راه حل بدید

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

ولی خودم برای اجرا کامند سیو کردم 5d0b-IMG_20230716_200806_335.jpgd556-IMG_20230716_200740_425.jpgabc9-IMG_20230716_200721_138.jpg

سلام محمد رسول عزیز

دستور composer dumpautoload رو بزن.

یک بار از تینکر خارج شو و trait مربوط به فکتوری HasFactory رو یوز کن.

و مجدد واردش شو.

احمدرضا فاطمی کیا ۲۶ تیر ۱۴۰۲، ۱۵:۳۰

به این شکل باید use کنم؟ چون زیرش خط قرمز کشیده میشه یعنی ارور و این یکی از مدل هاست


namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Database\\Eloquent\\Model;
class Video extends Model{
  protected static function newFactory(){
    use HasFactory;
  }
}
محمدرسول اصغری ۲۶ تیر ۱۴۰۲، ۱۵:۳۵

خیر به شکل زیر:

Trait رو داخل کلاس یوز کنید.

class Video extends Model{
    use HasFactory;
}
احمدرضا فاطمی کیا ۲۶ تیر ۱۴۰۲، ۱۸:۱۳

سلام،

یه توضیح در مورد متد newFactory بیارم،

کلیت موضوعی که در داک نوشته شده است به این شکل است، ببینید بطور پیش فرض طبق توضیحی که احمدرضا نوشته اگر عمل کنید، یعنی: (مدل Video.php)

namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Database\\Eloquent\\Model;
class Video extends Model
{
    use HasFactory;
}

با توجه به استفاده از تریت HasFactory از داخل نیم اسپیس Database\\Factories بدنبال کلاسی با نام VideoFactory میگرده. (پیشوند Video همنام با اسم مدل است) اما اگر براساس این قانون فولدربندی و کلاس بندی نکردی و مثلا در مکانی دیگر (فرضاً داخل پوشه database/factories فولدری بنام test ساختی و کلاس VideoFactory.php رو اونجا ساختی) میتونی متد newFactory رو بازنویسی کنی: (مدل Video.php)

namespace App\\Models;
use Illuminate\\Database\\Eloquent\\Factories\\HasFactory;
use Illuminate\\Database\\Eloquent\\Model;
use Database\\Factories\\Test\\VideoFactory;
class Video extends Model
{
    use HasFactory;
    public static function newFactory()
    {
        return VideoFactory::new();
    }
}

مجدد tinker رو باز میکنی:

App\\Models\\video::factory()->create()

newFactory متد تریت HasFactory هست و به این شکله اگر این متد بازنویسی شده باشه، از این متد تبعیت میکنه وگرنه همون موضوع پیدا کردن کلاس فکتوری براساس ModelName و ... که در بالا توضیح دادم.

پ.ن: البته میتونی متدی بسازی(حتی همین newFactory) رو بصورت مستقیم صدا بزنی و بجای factory() متد را صدا بزنی. بازهم نتیجه همین است.(منظور دست برنامه نویس باز است که چطور عمل کند منتها براساس قوانین فریمورک پیش برید.)

محسن موحد ۲۷ تیر ۱۴۰۲، ۰۶:۲۳

ممنون از آقای فاطمی کیا عزیز و آقا محسن موحد که انقدر پاسخ‌های کاملی رو ارائه دادند

درست شد✅️

محمدرسول اصغری ۲۸ تیر ۱۴۰۲، ۰۳:۵۸

موفق باشید.

در صورت حل مشکل تیک حل شده رو بزنید تا تاپیک از پیگیری خارج بشه.

بهترین پاسخ
احمدرضا فاطمی کیا ۲۸ تیر ۱۴۰۲، ۰۵:۵۱