TGViewer
| AmirHossein | | AmirHossein | @amirhdeveloper · 611 subscribers
Post #356 356
فصل پنج - Migrations and Database

بخش دوم - Factories


در این قسمت به متد های مربوط به فکتوری ها و قابل فراخوانی از مدل ها می پردازیم.

1- متد factory
برای ایجاد یک فکتوری جدید استفاده می‌شود. در نسخه‌های قدیمی لاراول این متد به طور خودکار در دسترس بود، اما در نسخه‌های جدید لاراول باید از Model::factory() استفاده کنید.
User::factory()->...


در اینجا از متد factory برای تولید یک فکتوری از مدل User استفاده شده است.

2- متد create
برای ذخیره مدل‌های تولیدشده در پایگاه داده استفاده می‌شود. این متد رکورد جدید را در دیتابیس ذخیره می‌کند.
User::factory()->create();


در این مثال، کاربر جدیدی بر اساس فیلد های تعریف شده در UserFactory ایجاد و ذخیره می‌شود.

3- متد trashed
برای فیلتر کردن مدل‌هایی که در حالت soft delete قرار دارند، استفاده می‌شود. این متد برای زمانی که می‌خواهید فقط مدل‌های حذف‌شده را ایجاد کنید مفید است.
User::factory()->trashed()->create();


در این مثال، کاربری که حذف شده است، ایجاد می‌شود.

4- متد make
مشابه create است اما رکورد را ذخیره نمی‌کند. این متد فقط شی مدل را برمی‌گرداند و هیچ تغییراتی در دیتابیس ایجاد نمی‌کند.
$user = User::factory()->make();


در اینجا، یک مدل جدید ساخته می‌شود اما در پایگاه داده ذخیره نمی‌شود.

5- متد count
برای مشخص کردن تعداد رکوردهایی است که باید ایجاد شوند.
User::factory()->count(10)->create();


در اینجا 10 کاربر ایجاد و در پایگاه داده ذخیره می‌شود.

6- متد suspended
معمولاً به عنوان یک حالت (state) در فکتوری‌ها استفاده می‌شود. این متد یک وضعیت خاص (مثل تعلیق یا وضعیت غیر فعال) را به مدل اختصاص می‌دهد.
User::factory()->suspended()->create();


در اینجا، یک کاربر که در وضعیت تعلیق قرار دارد، ایجاد می‌شود.

7- متد state
برای اعمال حالت‌های خاص (custom states) به مدل‌های تولید شده استفاده می‌شود. این متد به شما این امکان را می‌دهد که ویژگی‌های مدل را به صورت پویا تغییر دهید.
User::factory()->state([
'email_verified_at' => null,
])->create();


در اینجا، یک کاربر تولید می‌شود که ایمیل او تایید نشده است.

8- متد has
برای ایجاد روابط (مثل روابط hasMany) استفاده می‌شود. این متد به شما این امکان را می‌دهد که تعداد مدل‌های وابسته (مانند پست‌ها، کامنت‌ها و غیره) را که باید به مدل اصلی تعلق داشته باشند مشخص کنید.
User::factory()->has(Post::factory()->count(5))->create();


ابتدا یک کاربر جدید ایجاد می‌شود، سپس 5 پست مرتبط با این کاربر به طور خودکار ایجاد می‌شود.
ای متد نیاز به پیاده سازی روابط مربوطه در مدل های مربوطه می باشد.

9- متد hasXXX
این متد همان متد has می باشد اما به صورت داینامیک.
User::factory()->hasPosts(3)->create();


در اینجا، کاربری ایجاد می‌شود و به طور خودکار 3 پست برای او ایجاد می‌شود.
بخش Posts در متد hasPosts درواقع نام رابطه posts در مدل User می باشد.

10- متد for
برای تعریف یک رابطه به صورت خاص (معمولاً belongsTo) استفاده می‌شود. این متد به شما این امکان را می‌دهد که مدل‌های وابسته را به مدل اصلی اختصاص دهید.
Post::factory()->for(User::factory())->create();


در اینجا، یک پست ایجاد می‌شود که به طور خودکار به یک کاربر جدید تعلق دارد.

11- متد forXXX
این متد همان متد for می باشد اما به صورت داینامیک.
Post::factory()->forUser($user)->create();


در اینجا، یک پست برای یک کاربر مشخص ایجاد می‌شود.
بخش User در متد forUser درواقع رابطه user در مدل Post می باشد.

12- متد hasAttached
برای ایجاد روابط وابسته بین مدل‌ها (مانند belongsToMany) استفاده می‌شود. این متد برای مدیریت روابط چند به چند (many-to-many) کاربرد دارد.
User::factory()->hasAttached(Role::factory(), 3)->create();


در اینجا، یک کاربر جدید ایجاد می‌شود و به طور خودکار به 3 نقش متصل می‌شود.

13- متد recycle
برای استفاده از یک مدل موجود (که قبلاً ایجاد شده یا حذف نرم شده) در روابط مختلف میان مدل‌ها استفاده می‌شود. این متد به شما کمک می‌کند که یک مدل خاص را در فکتوری‌های مختلف برای ایجاد رکوردهای مرتبط استفاده کنید تا یک نسخه واحد از آن مدل برای همه روابط در فرآیند ساخت داده‌ها استفاده شود.
Ticket::factory()->recycle(Airline::factory()->create())->create();


در اینجا، ابتدا یک ایرلاین جدید ایجاد می‌شود، سپس متد recycle این ایرلاین را برای استفاده در بلیط‌ها و پروازهایی که ایجاد می‌شوند، انتخاب می‌کند. درواقع ایرلاین ایجاد شده در تمام بلیط‌ها و پروازهای موجود از قبل استفاده می‌شود.

#laravel #لاراول #فصل_۵
@AmirhDeveloper
.
  • 🔥 4
More from @amirhdeveloper
  1. Sep 30, 2026پکیج LaraGram Sentinel منتشر شد؛ یک پنل مانیتورینگ که هیچ چیزی از زیر دستش در نمی‌ره! تمام…
  2. Sep 23, 2026از امروز با کاهش شدید حاکرها مواجه میشیم
  3. Sep 19, 2026🔴 سوال سوم دو Region دارید: US-East و EU-West. کاربران در هر دو Region هستند. سیستم باید…
  4. Sep 19, 2026🟠 سوال دوم فرض کنید Service A به Service B درخواست می‌زند. B به‌دلیل overload، latency با…
  5. Sep 19, 2026🟢 سوال اول فرض کنید یک سرویس backend داریم که به PostgreSQL وصل می‌شود. تعداد requestها ن…
  6. Sep 19, 2026خیلی وقته پست‌های کانال فقط درمورد LaraGram بوده، وقتشه یکم جالب‌ترش کنیم اگر ممبرها هنوز…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →