dilneiss / generators

包含模式信息的先进Laravel生成器。

v2.0.1 2022-02-09 01:09 UTC

This package is auto-updated.

Last update: 2024-09-09 06:36:29 UTC


README

在你的 make:migration 命令中轻松定义迁移模式。此软件包提供的新命令包括

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

这允许你执行 php artisan make:migration:schema create_dogs_table --schema="name:string:nullable, description:text, age:integer, email:string:unique" 并得到一个完整的迁移,你可以通过 php artisan migrate 运行。对于像这样简单的案例,不需要在迁移文件内部调整。如果你确实需要更改某些内容,这会更加容易,因为大部分代码已经被生成。

Jeffrey Way 在 2015 年创建,作为他的 JeffreyWay/Laravel-4-Generators 软件包的自然发展,为 Laravel 5 提供相同的功能。自 2017 年起,它由 Backpack for Laravel 团队维护,并由像你这样的社区成员添加功能和修复。所以,请随时加入我们。

https://user-images.githubusercontent.com/1032474/92732702-cd8b3700-f344-11ea-8e3b-ae86501d66fe.gif

目录

版本

根据你的 Laravel 版本,你应该

  • 使用 JeffreyWay/Laravel-4-Generators 为 Laravel 4;
  • 使用此软件包的 v1 版本为 Laravel 5.0 - 5.8;
  • 使用此软件包的 v2 版本为 Laravel 6-8;

安装

你可以使用 composer 安装此项目的 v2 版本,服务提供者将由 Laravel 本身自动加载

composer require --dev laracasts/generators

你已经设置好了。在控制台中运行 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"

模型

现在,当你创建一个迁移时,你通常希望有一个模型与之对应,对吧?默认情况下,此软件包不会为迁移创建一个模型。但可以。只需指定 --model=true,它就会为你做这件事。

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

迁移路径

如果你想为你的迁移文件指定不同的路径,你可以使用 --path 选项,如下所示

php artisan make:migration:schema create_dogs_table --path=\database\migrations\pets

外键约束

当你需要生成外键约束时,还有一些特别的东西。想象一下,你有一个文章表,其中每篇文章都属于一个用户。让我们试试

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

注意到 "foreign" 选项(user_id:unsignedInteger:foreign)?这是特殊的。它表示 user_id 应该收到一个外键约束。遵循约定,这将给我们

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

因此,对于完整的命令,我们的模式应该如下所示

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

棒极了。

关联表

所以您需要在数据库中设置一个交叉表(pivot table)吗?很简单。我们可以使用一条命令来生成整个类。

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');
	}

}

请注意,这里遵循了命名规范,无论您以何种顺序传递表名。