在 Laravel 中,我们使用迁移来创建表,然后使用 Seeders 来播种表,但我没有得到它的好处,因为我们可以通过正常方式通过 PHPMYADMIN 来做到这一点,然后我们需要这样做,因为我们编写了很多行代码是的,但是我们如何证明这些代码行的合理性呢?
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemsTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('items', function(Blueprint $table)
{
$table->increments('id');
$table->integer('owner_id');
$table->string('name');
$table->boolean('done');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('items');
}
}
确实,迁移是通过 php artisan 命令创建的,但是它们有什么好处呢?因为我们有替代方案可以做到这一点? Seeder 文件也是如此,因为我们为其编写了很多行代码
class ItemTableSeeder extends Seeder{
public function run(){
DB::table('items')->delete();
$items= array(
array(
'owner_id' => '1',
'name' => 'Watch The Spectacular Now',
'done' => True
),
array(
'owner_id' => '2',
'name' => 'Watch Avengers',
'done' => False
),
array(
'owner_id' => '1',
'name' => 'Watch The Iron man',
'done' => False
),
array(
'owner_id' => '1',
'name' => 'Divergent',
'done' => False
),
array(
'owner_id' => '1',
'name' => 'Bat Man',
'done' => False
),
array(
'owner_id' => '1',
'name' => 'X-Men Days Of Future Past',
'done' => False
)
);
DB::table('items')->insert($items);
}
}
主要好处是,您将在开发服务器/工作站中执行此操作,并且您可以在开发中多次更改架构,迁移,回滚迁移,然后重新迁移它们,并且一旦您的应用程序ID完成,您就不需要不必记住在生产环境中必须做什么,Laravel 会自动为你完成。
使用 PHPMyAdmin,您必须在本地和远程服务器中手动创建表并编辑字段,并且您将面临忘记某些内容并破坏应用程序的风险。而且,如果您有不止一台服务器为您的应用程序提供服务,问题就更大了。
迁移和种子是数据库版本控制。想象一下,有一天您爱上了 PostgreSQL 或 MySQL 以外的任何东西。然后想象一下您想要对多行数据进行一些测试。您会运行 PHPMYADMIN 的等效程序并插入 100、1000 或 10000 行吗?
所以现在看看这个:
// migration
class CreateCommentsTable extends Migration {
public function up()
{
Schema::create('comments', function(Blueprint $table) {
$table->increments('id');
$table->string('body');
$table->integer('author_id')->unsigned();
$table->integer('post_id')->unsigned();
$table->timestamps();
});
}
// seeder
class CommentsTableSeeder extends Seeder {
public function run()
{
Eloquent::unguard();
$faker = Faker::create();
foreach(range(1, 1000) as $index)
{
Comment::create([
'body' => $faker->sentence(10),
'author_id' => rand(1,20),
'post_id' => rand(1,150)
]);
}
}
Faker
是一个很棒的工具,你可以在这里找到:https://github.com/fzaninotto/Faker
您现在需要做的就是运行
artisan migrate --seed
。
当然,比自动化种子有更多优势,如果您想更改架构等,您可以通过迁移来更改表。
迁移文件维护表的架构。使用迁移,您可能永远不必访问 phpMyAdmin(创建数据库除外)。完成后,您只需运行命令“php artisan migrate”并从 PHP 端本身创建表。此外,您永远不必担心数据库环境(MySql、Posgres、Sql Lite 等),因为迁移并不真正取决于您要将表迁移到的环境。
播种有助于在应用程序中创建不同的角色(管理员、用户、编辑器等)。您只需创建 Seeder 文件并运行“php artisan db:seed”命令即可将数据从 php 端填充到表中。种子还有助于创建测试数据。
在 Laravel 中,迁移就像数据库的魔咒:
轻松切换:在不同数据库之间快速切换。
历史记录器:跟踪数据库结构的所有更改。
一致的魅力:确保您的数据库在不同的设置中保持相同。
撤消按钮:轻松恢复或应用对数据库的更改。
团队和谐:让多个开发人员在数据库上工作,而不会互相干扰。
测试变得简单:轻松设置和清理测试数据库以实现准确的测试。