果冻想
认真玩技术的地方

Laravel初级教程之插入初始化数据

前言

我们在开发的时候总是会遇到这样的场景。比如我们开发了一个系统,这个系统在上线时,或者第一次部署时,都需要在数据库中导入一些初始化数据,系统启动都是需要依赖这些初始化数据的。

在开发基于Laravel的应用之前,我们都是维护一个上线的DB变更脚本,或者也叫DB初始化脚本。系统部署时,将该SQL脚本交给DBA去执行。这样就会出现一个问题,在项目组内很多时候有的开发人员对SQL语句不熟悉,这就需要开发人员将他的需求告知DBA,DBA来完成SQL语句的编写;又或者DBA在执行SQL脚本的时候,对业务不熟悉,只能盲目的进行执行,出现错误也很难搞定。

为了解决上述的问题,Laravel框架提供了一个面向开发者友好话的工具——seeds,通过这个工具或者命令,我们可以将我们需要进行初始化的数据进行PHP代码化,你不需要编写SQL语句,每个开发人员只需要维护好自己的初始化内容即可,这样大大减少了开发人员的负担,降低了出错的概率,提高了部署的速度和开发人员的效率。下面就对Laravel中的seeds进行详细的讲解和总结。

Laravel中的seeds

当我们通过composer create-project --prefer-dist laravel/laravel blog命令创建一个基于Laravel框架的工程之后,我们就可以通过命令php artisan make:seeder ProcessTableSeeder创建一个seeder,创建成功后,命令行会输出以下内容:

Seeder created successfully.

接下来在项目的database/seeds/目录下会生成一个名为ProcessTableSeeder.php的文件,并会生成以下模板代码:

class ProcessTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

这个seeder类继承自Seeder类,并且只有一个run方法,而我们开发者需要完成的任务就是在这个run方法中添加对数据库的增、删、改、查就OK了。就是这么Easy。比如,下面我向数据库插入一条数据:

public function run()
{
    //
    DB::table('tb_process')->insert([
        'name' => 'Send_Mail',
        'interval' => '*/5 * * * *',
        'url' => '/home/test/send_mail.py',
    ]);
}

到此,我们需要完成的初始化数据工作就可以都在这里面完成了。

调用seeds

但是,话又说回来,在整个项目工程中,有很多初始化数据的,不可能就只有像ProcessTableSeeder这样的一个seeder,那如果有多个seeder,如何组织每个seeder的调用前后关系呢?

是的,Laravel也考虑到了这个问题,同样在项目的database/seeds目录下有一个DatabaseSeeder.php,在DatabaseSeeder类内部使用call方法,按照业务逻辑调用每个seeder类,从而完成整个工程的数据库初始化动作。比如,我们可以这样写:

public function run()
{
    $this->call(UsersTableSeeder::class);
    $this->call(ProcessTableSeeder::class);
}

执行seeds

到目前为止,我们的思路就已经很清晰了,基本上要完成的任务也都快完成了,还剩下最后一项:如何执行seeds。

完成了seeder类的开发,或者在 DatabaseSeeder 类中定义好了调用种子类的逻辑,就可以使用Artisan命令db:seed执行种子,向数据库填充数据了。

对于Laravel这么优雅的框架,执行seeds也就是一个命令的事:

php artisan db:seed

Artisan命令db:seed默认运行DatabaseSeeder类;当然也可以使用--class选项指定要运行的种子类。就像这样:

php artisan db:seed --class=ProcessTableSeeder

当然了,我们也可以在运行migrate:refresh命令时,通过指定--seed选项的方式填充数据。就像这样:

php artisan migrate:refresh --seed

上面这句命令表示:还原&重新执行所有迁移,完成后再向数据库填充数据。

总结

好了,关于Laravel中的seeds就到此总结完毕。通过学习Laravel框架,又加深了自己对某些知识的认知,比如初始化数据居然可以写的如此简单、优雅。

编程,不只是工作,更是兴趣!

果冻想-一个原创技术文章分享网站。

2018年2月3日 于呼和浩特。

未经允许不得转载:果冻想 » Laravel初级教程之插入初始化数据
网站维护离不开您的支持,您可以赞助本站,谢谢支持
×

感谢您的支持,我们会一直保持!

扫码支持
请土豪扫码随意打赏

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

赞助本站
关注微信公众号
关注微信公众号和果冻一起分享你的疑惑与心得。
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

玩技术,我们是认真的

联系我们关于果冻