Laravel 5 Migration名称空间

时间:2015-12-09 15:48:24

标签: php laravel namespaces

您好我是来自Codeigniter的Laravel的新手

我尝试从迁移开始构建我的数据库,但我看到Github中的一些脚本以不同的方式使用命名空间,如:

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

另一个脚本使用:

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

仅限另一种用途:

use Illuminate\Database\Migrations\Migration;

在开始上课时为什么他们以这些方式使用命名空间?

我的代码在这里使用的是什么?为什么?

<?php

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

class Test extends Migration
{
    public function up()
    {
        Schema::create('test',function(Blueprint $table){
            $table->engine = 'InnoDB';
            $table->increments('id')->unsigned();
        });
    }

    public function down()
    {
        Schema::drop('test');
    }
}

1 个答案:

答案 0 :(得分:0)

config/app.php外观在'aliases' => [ ... 'Schema' => Illuminate\Support\Facades\Schema::class, ... ] 中注册了别名:

Schema

由于迁移类驻留在全局命名空间中,因此与use Illuminate\Support\Facades\Schema;别名具有相同的命名空间,因此use具有use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; 是多余的,因为它与别名注册完全相同。

因此不需要在迁移类文件中包含use Illuminate\Database\Migrations\Migration;语句。具有:

public function up()
{
    // Notice the 'Blueprint $table' type hint
    Schema::create('test',function(Blueprint $table){
        $table->engine = 'InnoDB';
        $table->increments('id')->unsigned();
    });
}

就够了。

至于仅包含use Illuminate\Database\Schema\Blueprint;的那些,他们可能不会提示提示闭包参数。

所以如果你有这个:

public function up()
{
    // Notice NO type hint for the '$table' closure parameter
    Schema::create('test',function($table){
        $table->engine = 'InnoDB';
        $table->increments('id')->unsigned();
    });
}

您需要加入use Illuminate\Database\Schema\Blueprint;。但如果你有这个:

use Illuminate\Database\Migrations\Migration;

您不需要加入class Test extends Migration

{{1}}始终是必需的,因为迁移类扩展了它:

{{1}}