通过 Laravel 5 Extended Generators 扩展包为 Laravel 5 数据库生成器锦上添花

   2016-12-06 0
核心提示:0、开场Laravel 5 已经为我们开箱提供了很多生成器,所以这个扩展包要做的只是在其基础上做一点锦上添花的事: make:migration:schema make:migration:pivot make:seed 下面我们就来逐一揭开这三条命令的面纱,看看究竟给我们带来怎样的方便。 1、安装 开始之

通过 Laravel 5 Extended Generators 扩展包为 Laravel 5 数据库生成器锦上添花

0、开场

Laravel 5 已经为我们开箱提供了很多生成器,所以这个扩展包要做的只是在其基础上做一点锦上添花的事:

  • make:migration:schema
  • make:migration:pivot
  • make:seed

下面我们就来逐一揭开这三条命令的面纱,看看究竟给我们带来怎样的方便。

1、安装

开始之前,还是先安装扩展包,照例还是通过Composer来安装:

composer require laracasts/generators --dev

接下来注册服务提供者,由于我们只需要在本地开发环境使用这个扩展包,而如果注册到 config/app.phpproviders 数组,则会导致生产环境也会加载,所以我们只需在 app/Providers/AppServiceProvider.php 中注册它即可:

public function register()
{
    if ($this->app->environment() == 'local') {
        $this->app->register('Laracasts\Generators\GeneratorsServiceProvider');
    }
}

然后我们在项目根目录下运行 php artisan ,看看会发生什么,会新增几个 make:* 命令!

2、使用示例

安装完成后,就可以使用这个扩展包了,我们将逐一演示开场提到的三个命令的使用。

包含表结构的迁移

php artisan make:migration:schema create_users_table --schema="username:string, email:string:unique"

注意到我们使用的格式:以冒号分隔字段名及其类型(索引),以逗号分隔多个字段。

该命令生成的迁移文件代码如下:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateUsersTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function(Blueprint $table) {
            $table->increments('id');
            $table->string('username');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('users');
    }

}

生成带表结构的迁移文件的时候,迁移文件名称(例如,“create_users_table”)比较重要,我们要通过这个名称判断你所要完成的事情。在本例中,我们以“create”关键字开头,标识着我们要创建一个新表。

此外,我们还可以使用“remove”或“add”关键字,来生成相应的代码模板。下面我们来创建一个删除一个列的迁移:

php artisan make:migration:schema remove_user_id_from_posts_table --schema="user_id:integer"

生成的迁移文件内容如下:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class RemoveUserIdFromPostsTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function(Blueprint $table) {
            $table->dropColumn('user_id');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function(Blueprint $table) {
            $table->integer('user_id');
        });
    }

}

以下是你可以编写的其他命令的示例:

  • php artisan make:migration:schema create_posts_table
  • php artisan make:migration:schema create_posts_table --schema="title:string, body:text, excerpt:string:nullable"
  • php artisan make:migration:schema remove_excerpt_from_posts_table --schema="excerpt:string:nullable"

大部分时候,在你创建一个迁移的时候,通常也需要创建与之对应的模型类。默认情况下,本扩展包在生成迁移的时候也随之创建了相应的Eloquent模型类。这意味着,如果你运行了下面这条命令:

php artisan make:migration:schema create_dogs_table --schema="name:string"

就会得到一个数据库迁移文件,以及 app/Dog.php 模型类,如果你不想生成模型类,可以在上述命令后面加上 --model=false 标识。

外键约束

本扩展包提供的生成迁移命令也支持生成外键约束,假设你有一个文章表,每篇文章归属于某个用户:

php artisan make:migration:schema create_posts_table --schema="user_id:integer:foreign, title:string, body:text"

注意到这个 foreign 选项,它标识着 user_id 需要有一个外键约束,遵循约定,生成的代码如下:

$table->integer('user_id');
$table->foreign('user_id')->references('id')->on('users');

完整代码如下:

Schema::create('posts', function(Blueprint $table) {
    $table->increments('id');
    $table->integer('user_id');
    $table->foreign('user_id')->references('id')->on('users');
    $table->string('title');
    $table->text('body');
    $table->timestamps();
);

数据透视表

是否需要在数据库中设置一个数据透视表?这很简单,只需通过这样一个简单的命令就可以搞定整个类:

php artisan make:migration:pivot tags posts

对应生成的代码如下:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePostTagPivotTable extends Migration {

    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('post_tag', function(Blueprint $table)
        {
            $table->integer('post_id')->unsigned()->index();
            $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
            $table->integer('tag_id')->unsigned()->index();
            $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::drop('post_tag');
    }

}

数据库填充器

运行如下命令:

php artisan make:seed posts

非常简单,这条命令会在 database/seeds 目录下生成一个填充器类:

<?php

use Illuminate\Database\Seeder;

// composer require laracasts/testdummy
use Laracasts\TestDummy\Factory as TestDummy;

class PostsTableSeeder extends Seeder {

    public function run()
    {
        // TestDummy::times(20)->create('App\Post');
    }
}
 
标签: Laravel 数据库
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • nginx 各类网站设置 (laravel , thinkphp , nod
    基础部分设置[root@centos ~]# vim /opt/nginx/conf/nginx.confuser www www;worker_processes auto;pid logs/nginx.pid;worker_rlimit_nofile 100000;events {use epoll;multi_accept on;worker_connections 65535 ;}http {include mime.types;default_type
    02-09
  • PHP trait 特性在 Laravel 中的使用个人心得
    trait 是在PHP5.4中为了方便代码复用的一种实现方式,但目前我在看的的PHP项目中较少看的有程序员去主动使用这个实现方式,在laravel中有很多 trait 的使用,关于trait 在 laravel 的使用请参看 Laravel 在哪些地方用了 trait?我曾在 Laravel 中大型项目面向
    02-09
  • 让我们用 laravel-mix 为 TypeScript 和 Sass
    介绍前端编译TypeScript、Sass、模板引擎等时经常用到Gulp和webpack。这是我个人的印象,但它们似乎都难以管理,因为它们的描述往往复杂而冗长。我不想积极进行,因为我要担心加载器的顺序并且有很多配置选项,我必须花时间去了解它们。我想推荐那里laravel
  • PHP Laravel软删除的实现方法介绍
    用Laravel 自带的 Eloquent ORM 来实现软删除。首先在数据迁移文件中添加删除时间字段./database/migrations/2014_10_12_000000_create_users_table.php?phpuse Illuminate\Database\Migrations\Migration;use Illuminate\Database\Schema\Blueprint;use Illu
  • Laravel中如何使用PHP的装饰器模式 php laravel
    本文小编为大家详细介绍“Laravel中如何使用PHP的装饰器模式”,内容详细,步骤清晰,细节处理妥当,希望这篇“Laravel中如何使用PHP的装饰器模式”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。装饰器模式定义:它可以帮助您在
    02-08 laravelphp
  • PHP laravel使用自定义邮件类实现发送邮件
    PHP laravel使用自定义邮件类实现发送邮件
    当登录邮箱为腾讯企业邮箱的时候。Phpmailer发送邮件就不好用了,具体哪里不好用,我没真没找到。但是,邮件得发啊,怎么办呢?我这里搞了一个自定义的发送邮件类,腾讯企业邮箱也可用。但是,邮件发送失败,不会返回报错信息,这个可能是有点坑。源码如下:?
  • 详解PHP laravel中的加密与解密函数
    目录一:简介二:配置三:使用加密/解密1:加密2:不使用序列化进行加密3:解密Laravel为我们提供了完整的加密方法及加密模式。我之前一般在加密的时候使用的是我自己写的加密函数,但是这个玩意,有的位置还是不太使用,当然,破解的话,基本上也是不可能的
  • PHP laravel缓存cache机制详解
    目录一、访问多个缓存存储二、从缓存中获取数据1.获取数据并设置默认值2.检查缓存项是否存在3.数值增加/减少4.获取存储5.获取删除三、缓存中存储数据1.获取存储数据2.缓存不存在时存储数据3.永久存储数据四、从缓存中移除数据Laravel中的cache为我们提供了三
  • PHP laravel实现导出PDF功能
    PHP laravel实现导出PDF功能
    目录一、laravel-tcpdf二、tcpdf三、TCPDF解决保存中文文件名的方法补充一、laravel-tcpdf导出PDF文件Laravel框架为我们集成了一个插件tcpdf。下载地址:https://github.com/elibyy/tcpdf-laravel然后使用composer进行安装就可以了。具体安装过程,请查看文末
  • PHP laravel缓存cache机制怎么实现
    今天小编给大家分享一下PHP laravel缓存cache机制怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。Laravel中的cache为我们
点击排行