您好我是来自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');
}
}
答案 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}}