Migration یک قابلیت داری به نام Seed نحوه کارش هم اینطوره بعد اینکه جدول ات رو ایجاد کرد و فیلد هاش هم رو تعیین کردی و بعد دیتابس ات رو تغذیه کنی.
برای مثال یک جدول برای خبر ایجاد میکنیم
کد:
> php artisan make:migration create_news_table
بعدش تنظیم فیلد هایی که تو این مسیر Migration برامون ایجاد کرده:
کد:
laravel/database/migrations/2015_08_23_121405_create_news_table.php
به این صورت
PHP:
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateNews extends Migration {
public function up() {
Schema::create( 'news' , function(Blueprint $table) {
$table->increments( 'id' );
$table->string( 'url' )->unique();
$table->string( 'headline' );
$table->text( 'story' );
$table->timestamps();
$table->softDeletes();
} );
}
public function down() {
Schema::drop( 'news' );
}
}
بعد هم اجرای دستور
تا ایجا ما جدولمون و با فیلد هاشون رو ایجاد کردیم ، حالا برای ایجاد یکسری دیتا اینکارها رو میکنیم.
اول از پیشنهاد میشه برای اینکار از Eloquent استفاده کنیم
خوب برای اینکار نیاز هست که یک مدل ایجاد کنیم ، دو راه داره میتونی خودت دستی مدل رو (News.php) ایجاد کنی تو این مسیر App یا از این دستور استفاده کنی:
کد:
php artisan make:model News
فایل مدل رو به این صورت تنظیم میکنیم (واضح هست نیازی به توضیح نداره)
PHP:
namespace App;
use Illuminate\Database\Eloquent\Model;
class News extends Model {
protected $fillable = ['headline' , 'story'];
protected $hidden = ['id' , 'deleted_at'];
}
حالا اینجا باید Seeder رو تنظیم کنیم ، فایل پیشفرض تو این مسیر هست laravel/database/seeds/DatabaseSeeder.php
یک کپی ازش میگیری به این نام تغییر میدی NewsTableSeeder
بعد فایل های DatabaseSeeder.php و NewsTableSeeder.php رو به این صورت تنظیم میکنی (توضیحات این هم واضحه)
PHP:
// DatabaseSeeder.php
use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;
class DatabaseSeeder extends Seeder {
public function run() {
Model::unguard();
// $this->call('UserTableSeeder');
$this->call( 'NewsTableSeeder' );
}
}
PHP:
// NewsTableSeeder.php
use Illuminate\Database\Seeder;
use App\News as News; // to use Eloquent Model
class NewsTableSeeder extends Seeder {
public function run() {
// clear table
News::truncate();
// add 1st row
News::create( [
'url' => 'news-url' ,
'headline' => 'News Headline' ,
'story' => 'The Story' ,
] );
// add 2nd row
News::create( [
'url' => 'second-url' ,
'headline' => 'Second Headline' ,
'story' => 'Second Story' ,
] );
}
}
بعد اینکارها نیاز هست که کلاس هامون رو اپدیت کنیم ، به دلیل اینکه 2 کلاس جدید ایجاد کردیم (NewsTableSeeder, News) با این دستور :
در آخر هم میتونیم دیتابس مون رو بهش دونه بدیم (Seed) با این دستور :
it's defined