santoshachari / schema-generators
扩展 Laravel 5.5 的生成器。
Requires
- php: >=5.4.0
- illuminate/support: ~5.0
Requires (Dev)
- phpspec/phpspec: ~2.1
This package is not auto-updated.
Last update: 2024-09-29 05:34:56 UTC
README
如果你熟悉我的 Laravel 4 Generators,那么这基本上是同一件事 - 只是升级到了 Laravel 5。
Laravel 5 内置了许多生成器,因此此包只需添加一些东西,例如
make:migration:schema
make:migration:pivot
make:seed
还将添加一两个更多。
使用方法
步骤 1:通过 Composer 安装
composer require laracasts/generators --dev
步骤 2:添加服务提供者
由于这些生成器仅适用于本地开发,因此您不需要更新生产环境中的 providers
数组 config/app.php
。相反,在 app/Providers/AppServiceProvider.php
中添加提供者,如下所示
public function register() { if ($this->app->environment() == 'local') { $this->app->register('Laracasts\Generators\GeneratorsServiceProvider'); } }
步骤 3:运行 Artisan!
您已设置完毕。从控制台运行 php artisan
,您将看到 make:*
命名空间部分的新的命令。
示例
带有模式的迁移
php artisan make:migration:schema create_users_table --schema="username:string, email:string:unique"
注意我们在声明任何适用的模式时使用的格式:逗号分隔的列表...
COLUMN_NAME:COLUMN_TYPE
因此,以下任何一种都可以
username:string
body:text
age:integer
published_at:date
excerpt:text:nullable
email:string:unique:default('foo@example.com')
使用前面的模式...
--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"
现在,请注意我们正在使用正确的 Schema 方法。
<?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
中得到一个 Eloquent 模型。当然,你可以通过添加 --model=false
标志/选项来选择退出此操作。
外键约束
当你需要生成外键约束时,还有一个隐藏的糖。假设你有一个帖子表,其中每个帖子都属于一个用户。让我们试试
php artisan make:migration:schema create_posts_table --schema="user_id:integer:foreign, title:string, body:text"
注意到那个“foreign”选项(user_id:integer: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();
);
酷炫。
Pivot 表
所以,你需要迁移来在数据库中设置一个联接表?很简单。我们可以用单个命令来构建整个类。
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'); } }