
توی دوره رایگان PHP، هر چیزی که برای حرفهای شدن نیاز داری رو یاد میگیری! از مفاهیم پایه تا پیشرفته، همراه با یه پروژه واقعی برای ساخت یه سایت مثل آپارات.
مشاهده بیشتر
توی این دوره با هم یه وبسایت خبری واقعی رو از صفر میسازیم! از طراحی دیتابیس و احراز هویت تا ساخت API و یه پنل مدیریت حرفهای، همه رو یاد میگیریم و آماده پروژههای واقعی میشی!
مشاهده بیشترمشخصات مقاله
آموزش پر کردن بانک اطلاعاتی با داده های آزمایشی در لاراول
پر کردن بانک اطلاعاتی با داده های آزمایشی (Database Seeding)
- مقدمه
-
نوشتن کلاس های Seeder
- استفاده از model factory ها
- فراخوانی کلاس های Seeder بیشتر
- اجرای کلاس های Seeder
مقدمه
Laravel به شما اجازه می دهد با بهره گیری از کلاس های seed پایگاه داده ی خود را با داده های آزمایشی پر کنید. تمامی کلاس های seed در پوشه ی database/seeds ذخیره می شوند. کلاس های seed را می توان با اسم دلخواه نام گذاری کرد، با این حال بایستی از قراردادهای نام گذاری درLaravel نیز پیروی کرد مانند UsersTableSeeder. لاراول به طور پیش فرض یک کلاس به نام DatabaseSeeder ایجاد می کند. با فراخوانی متد call این کلاس می توانید دیگر کلاس های seed را صدا زده و ترتیب اجرای آن ها (seeding order) را مدیریت نمایید.
نوشتن کلاس های Seeder
به منظور ایجاد کلاس seeder، لازم است دستور آرتیزان make:seeder را اجرا کنید. تمامی seeder هایی که لاراول ایجاد می کند داخل پوشه یdatabase/seeds جایگذاری می شوند.
1 2 | php artisan make:seeder UsersTableSeeder <button></button> |
به صورت پیش فرض، کلاس seeder تنها یک متد به نام run را شامل می شود. این متد پس از اجرای دستور db::seed فراخوانده می شود. در بدنه ی متد run می توان داده های مورد نظر را به روش دلخواه در پایگاه داده درج کرد. داده ها را می توان به صورت دستی با بهره گیری از query builder وارد پایگاه داده کرد یا آن ها را به وسیله ی Eloquent model factory در داخل بانک اطلاعاتی درج نمود.
در زیر کلاس پیش فرض DatabaseSeeder که با نصب Laravel آماده در اختیار برنامه نویس قرار می گیرد را ویرایش می کنیم. برای این منظور یک دستور insert ساده به متد run اضافه می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; 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' ), ]); } } <button></button> |
استفاده از model factory
مشخص است که اضافه کردن attribute برای هر کلاس مدل seed امری خسته کننده و طاقت فرسا است. بجای این کار می توانید با استفاده ازmodel factory به راحتی تعداد زیادی رکورد در پایگاه داده ایجاد کنید. ابتدا می بایست نحوه ی تعریف factory ها را با مراجعه به مستندات آن بیاموزید. پس از ایجاد factory های لازم، می توانید متد کمکی factory را برای درج رکوردها در پایگاه داده صدا بزنید.
در مثال زیر ابتدا 50 رکورد user ایجاد کرده، سپس یک رابطه به هر یک پیوست می کنیم:
1 2 3 4 5 6 7 8 9 10 11 12 | /** * 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()); }); } <button></button> |
فراخوانی کلاس های Seeder بیشتر
متد call را در کلاس DatabaseSeeder برای اجرای دیگر کلاس های seed فراخوانی کنید. فراخواندن این متد سبب می شود کلاس های seedبه فایل های متعدد کوچکتر تقسیم شده و هیچ یک از کلاس ها بیش از حد بزرگ نشود.
کافی است اسم کلاس seeder مورد نظر را به run پاس دهید:
1 2 3 4 5 6 7 8 9 10 11 12 | /** * Run the database seeds. * * @return void */ public function run() { $this ->call(UsersTableSeeder:: class ); $this ->call(PostsTableSeeder:: class ); $this ->call(CommentsTableSeeder:: class ); } <button></button> |
اجرای کلاس های Seeder
پس از تعریف کلاس های seeder، می توانید دستور آرتیزان db:seed را برای داده ریزی (قرار دادن داده های آزمایشی) در پایگاه داده اجرا کنید. به صورت پیش فرض، دستور db:seed کلاس DatabaseSeeder را اجرا می کند که به واسطه ی آن تمامی دیگر کلاس های seed نیز فراخوانده می شوند. می توان این کلاس ها را به صورت منفرد هم اجرا کرد. برای نیل به این هدف لازم است گزینه ی --class را با اسم کلاس دلخواه مقداردهی نمایید:
1 2 3 | php artisan db:seed php artisan db:seed -- class =UsersTableSeeder <button></button> |
می توانید پایگاه داده ی خود را با فراخوانی دستور migrate:refresh با داده های آزمایشی پر کرده (seed)، بعلاوه آن را یکجا به پیش از اعمال آخرین تغییرات برگردانید (rollback) و نیز تمامی migration های خود را مجددا اجرا کنید. استفاده از این دستور بیشتر زمانی توصیه می شود که بخواهید یک پایگاه داده را کاملا از نو بسازید:
1 2 | php artisan migrate:refresh --see <button></button> |