Laravel 中迁移的好处

问题描述 投票:0回答:4

在 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);

    }

}
php mysql laravel-4 migration
4个回答
5
投票

主要好处是,您将在开发服务器/工作站中执行此操作,并且您可以在开发中多次更改架构,迁移,回滚迁移,然后重新迁移它们,并且一旦您的应用程序ID完成,您就不需要不必记住在生产环境中必须做什么,Laravel 会自动为你完成。

使用 PHPMyAdmin,您必须在本地和远程服务器中手动创建表并编辑字段,并且您将面临忘记某些内容并破坏应用程序的风险。而且,如果您有不止一台服务器为您的应用程序提供服务,问题就更大了。


4
投票

迁移和种子是数据库版本控制。想象一下,有一天您爱上了 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

当然,比自动化种子有更多优势,如果您想更改架构等,您可以通过迁移来更改表。


0
投票

迁移文件维护表的架构。使用迁移,您可能永远不必访问 phpMyAdmin(创建数据库除外)。完成后,您只需运行命令“php artisan migrate”并从 PHP 端本身创建表。此外,您永远不必担心数据库环境(MySql、Posgres、Sql Lite 等),因为迁移并不真正取决于您要将表迁移到的环境。

播种有助于在应用程序中创建不同的角色(管理员、用户、编辑器等)。您只需创建 Seeder 文件并运行“php artisan db:seed”命令即可将数据从 php 端填充到表中。种子还有助于创建测试数据。


0
投票

在 Laravel 中,迁移就像数据库的魔咒:

  1. 轻松切换:在不同数据库之间快速切换。

  2. 历史记录器:跟踪数据库结构的所有更改。

  3. 一致的魅力:确保您的数据库在不同的设置中保持相同。

  4. 撤消按钮:轻松恢复或应用对数据库的更改。

  5. 团队和谐:让多个开发人员在数据库上工作,而不会互相干扰。

  6. 测试变得简单:轻松设置和清理测试数据库以实现准确的测试。

© www.soinside.com 2019 - 2024. All rights reserved.