- پنجشنبه 20 دی 1397 ساعت 16:18
- 5.6.29
- در حال تکمیل
- منقضی شده
مقدمه
لاراول با استفاده از کلاسهای سید، روش سادهای برای سیدکردن (خوراندن) داده تست به دیتابیس را ارائه میدهد. تمامی کلاسهای سید در دایرکتوری database/seeds
قرار دارند. کلاسهای سید میتوانند هر نامی را که میخواهید داشته باشند، اما شاید بهتر باشد که کانوِنشِن (الگوی قراردادی) مشخصی مانند UsersTableSeeder
و غیره را دنبال کنید. به صورت پیشفرض، یک کلاس DatabaseSeeder
برای پروژه شما تعریف شده است. داخل این کلاس، با استفاده از متد call
میتوانید سایر کلاسهای سید را اجرا کنید، که به شما امکان کنترل ترتیب اجرای عملیات سیدینگ را میدهد.
نوشتن سیدرها
برای تولید یک سیدر، کامند آرتیزان make:seeder
را اجرا کنید. تمامی سیدرهای تولید شده توسط فریمورک در دایرکتوری database/seeds
قرار میگیرند.
php artisan make:seeder UsersTableSeeder
به صورت پیشفرض، هر کلاس سیدر تنها حاوی متد run
است. این متد هنگامی که کامند آرتیزان db:seed
اجرا شود، فراخوانی میشود. داخل متد run
، هر دادهای که میخواهید میتوانید به دیتابیس خود وارد کنید. با استفاده از کوئری بیلدر و یا الوکوئنت مدل فکتوری، میتوانید دادهها را به صورت دستی به دیتابیس وارد کنید.
Mass assignment protection در هنگام سید کردن داده به دیتابیس به صورت خودکار غیرفعال میشود.
به عنوان یک مثال، بیایید کلاس پیشفرض DatabaseSeeder
را ویرایش کرده و یک دستور ورود داده به دیتابیس را به متد run
اضافه کنیم.
<?php
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('users')->insert([
'name' => str_random(10),
'email' => str_random(10).'@gmail.com',
'password' => bcrypt('secret'),
]);
}
}
هر وابستگی را که میخواهید میتوانید در سیگنِچِر متد run
به صورت type-hint تزریق کنید. این وابستگیها به صورت خودکار توسط سرویس کانتینر لاراول ریزالو میشوند.
استفاده از مدل فکتوریها
طبیعتا، مشخص کردن اتریبویتها برای تکتک سیدهای مدل، کاری خسته کننده است. به جاری اینکار، میتوانید از مدل فکتوریها برای تولید رکورد دیتابیس به تعداد زیاد استفاده کنید. ابتدا، داکیومنت مدل فکتوری را مطالعه کنید تا نحوه تعریف فکتوریها را یاد بگیرید. هنگامی که فکتوریهای خود را تعریف کردید، میتوانید تز هلپر فانکشن factory
برای ورود رکوردها به دیتابیس استفاده کنید.
برای مثال، بیایید 50 کاربر بسازیم و به هر کاربر یک ریلیشنشیپ اَتَچ کنیم:
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
factory(App\User::class, 50)->create()->each(function ($u) {
$u->posts()->save(factory(App\Post::class)->make());
});
}
فراخوانی سیدرهای اضافه
داخل کلاس DatabaseSeeder
میتوانید از متد call
برای اجرای کلاسهای سید اضافه استفاده کنید. با استفاده از متد امکان شکستن سیدینگ دیتابیس به چندین فایل را دارید تا با این کار هیچ کلاس سیدری خیلی بزرگ نشود. نام کلاس سیدری را که میخواهید اجرا شود را به این متد ارسال کنید:
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call([
UsersTableSeeder::class,
PostsTableSeeder::class,
CommentsTableSeeder::class,
]);
}
اجرای سیدرها
هنگامی که سیدرهای خود را نوشتید، ممکن است نیاز به ایجاد مجدد اتولودر کامپوزر داشته باشید، این کار را با کامند dump-autoload
میتوانید انجام دهید.
composer dump-autoload
حالا میتوانید از کامند آرتیزان db:seed
برای سید دیتابیس خود استفاده کنید. به صورت پیشفرض، کامند db:seed
، کلاس DatabaseSeeder
را اجرا میکند که میتواند جهت فراخوانی کلاسهای سید دیگر استفاده شود. با این وجود، با استفاده از آپشن --class
میتوانید یک کلاس سیدر مشخص را که میخواهید اجرا شود را مشخص کنید:
php artisan db:seed
php artisan db:seed --class=UsersTableSeeder
همچنین با استفاده از کامند migrate:refresh
که مایگریشنهایتان را رولبَک کرده و مجددا اجرا میکند، میتوانید به دیتابیس خود سید بخورانید. این کامند برای ساخت مجدد دیتابیس به صورت کامل سودمند است:
php artisan migrate:refresh --seed
سایر پستهای داکیومنت
- پیشگفتار
- Release Notes ترجمه در ورژنهای بعدی
- راهنمای آپگرید ترجمه در ورژنهای بعدی
- Contribution Guide ترجمه در ورژنهای بعدی
- شروع
- نصب
- پیکربندی
- ساختار دایرکتوری ترجمه در ورژنهای بعدی
- Laravel Homestead ترجمه در ورژنهای بعدی
- Laravel Valet ترجمه در ورژنهای بعدی
- دپلویمنت ترجمه در ورژنهای بعدی
- مفاهیم معماری
- چرخه کار ریکوئستها
- Service Container ترجمه در ورژنهای بعدی
- سرویس پرووایدرها
- فسادها ترجمه در ورژنهای بعدی
- Contracts ترجمه در ورژنهای بعدی
- اصول اولیه
- مسیریابی
- میدلور
- حفاظت در مقابل حملات CSRF
- کنترلرها
- HTTP Requests ترجمه در ورژنهای بعدی
- HTTP Responses ترجمه در ورژنهای بعدی
- ویوها
- تولید URL
- HTTP Session ترجمه در ورژنهای بعدی
- Validation ترجمه در ورژنهای بعدی
- Error Handling ترجمه در ورژنهای بعدی
- Logging ترجمه در ورژنهای بعدی
- فرانتاند
- تمپلتهای Blade
- محلیسازی
- JavaScript & CSS Scaffolding ترجمه در ورژنهای بعدی
- Compiling Assets (Laravel Mix) ترجمه در ورژنهای بعدی
- امنیت
- Authentication ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Authorization ترجمه در ورژنهای بعدی
- Encryption ترجمه در ورژنهای بعدی
- Hashing ترجمه در ورژنهای بعدی
- Resetting Passwords ترجمه در ورژنهای بعدی
- مباحث عمیقتر
- Artisan Console ترجمه در ورژنهای بعدی
- Broadcasting ترجمه در ورژنهای بعدی
- Cache ترجمه در ورژنهای بعدی
- Collections ترجمه در ورژنهای بعدی
- Events ترجمه در ورژنهای بعدی
- File Storage ترجمه در ورژنهای بعدی
- Helpers ترجمه در ورژنهای بعدی
- Mail ترجمه در ورژنهای بعدی
- Notifications ترجمه در ورژنهای بعدی
- Package Development ترجمه در ورژنهای بعدی
- Queues ترجمه در ورژنهای بعدی
- Task Scheduling ترجمه در ورژنهای بعدی
- دیتابیس
- دیتابیس: شروع ترجمه در ورژنهای بعدی
- Database: Query Builder ترجمه در ورژنهای بعدی
- دیتابیس: صفحهبندی
- دیتابیس: مایگریشن
- دیتابیس: سیدینگ
- Redis ترجمه در ورژنهای بعدی
- Eloquent ORM
- Eloquent: Getting Started ترجمه در ورژنهای بعدی
- Eloquent: Relationships ترجمه در ورژنهای بعدی
- Eloquent: Collections ترجمه در ورژنهای بعدی
- Eloquent: Mutators ترجمه در ورژنهای بعدی
- Eloquent: API Resources ترجمه در ورژنهای بعدی
- Eloquent: Serialization ترجمه در ورژنهای بعدی
- Testing
- Testing: Getting Started ترجمه در ورژنهای بعدی
- HTTP Tests ترجمه در ورژنهای بعدی
- Browser Tests (Laravel Dusk) ترجمه در ورژنهای بعدی
- Database Testing ترجمه در ورژنهای بعدی
- Mocking ترجمه در ورژنهای بعدی
- Official Packages
- Laravel Cashier ترجمه در ورژنهای بعدی
- Envoy Task Runner ترجمه در ورژنهای بعدی
- Laravel Horizon ترجمه در ورژنهای بعدی
- API Authentication (Passport) ترجمه در ورژنهای بعدی
- Laravel Scout ترجمه در ورژنهای بعدی
- Laravel Socialite ترجمه در ورژنهای بعدی