【问题标题】:Benefit Of Migrations in LaravelLaravel 迁移的好处
【发布时间】:2014-06-20 01:57:20
【问题描述】:

在 laravel 中,我们使用 Migrations 来创建表,然后使用 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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢先生,我明白你的意思了,先生,但是有没有办法将你所有的数据库存储到你的种子文件中?例如用户输入了 100 个数据条目,我们的播种机中只有 2 个,然后在从播种机播种时,我们可能会删除所有其他 98 个条目,我们如何备份?
    【解决方案2】:

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

    当然,除了自动化种子之外,还有更多优势,您可以通过迁移来更改表,以防您想更改架构等。

    【讨论】:

    • 谢谢。但是,如果我们在域上做我们的工作。像 www.example.com 一样,是否有在我们的域上运行我们的迁移?我在我的域托管中没有找到任何终端
    • 这取决于您的托管。如果您没有 cli 访问权限,则可以尝试将 ssh 隧道设置到您的 ftp 并在您的计算机上运行 artisan,但这不是最佳选择。
    • 那么这些策略只适用于我们的机器?只是?
    • 当然不是,但是如果您的主机不提供终端,那么您将无法像在本地运行工匠命令一样。当然,您也可以在本地环境中创建架构并将其导出为标准 SQL,然后在生产服务器上导入。
    • 是的,我们可以做到,所以我正在使用 000webhosting,他们不提供任何终端设备,你知道还有谁提供吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-02-26
      • 2019-12-27
      • 2021-02-28
      • 2018-04-18
      • 2016-03-21
      • 2019-05-17
      • 2016-11-11
      相关资源
      最近更新 更多