5

我现在正在使用 Laravel 5.1。

命令生成的迁移类文件php artisan make:migration create_users_table --create=users如下所示:

<?php

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

class CreateUsersTable extends Migration
{
    // up and down ...
}

当我编辑这个迁移类文件并保存它时,我的崇高文本中的 PHP Code Sniffer 会指出一条非标准消息'Each Class must be in a namespace of at least one level'

我在 [ https://laravel.com/docs/5.1/migrations]和最高批次搜索结果中都没有得到答案。关于stackoverflow的相关问题也没有让我明白。

有谁知道原因,或者给我一些提示?谢谢!

4

1 回答 1

7

基本上,这是一个设计问题。有些人使用命名空间迁移。但是迁移被迁移者加载和存储在迁移数据库表中的方式可能是一个问题,将它们命名为命名空间。如果您稍微检查一下,您会发现类的名称是迁移文件名称的一部分,Laravel 需要使用该名称来实例化迁移类来执行它。例如,将其命名空间可能会导致 2 个不同的类具有相同的基类名称(类名称减去名称空间),这会发生冲突并且很难找到。一个解决方案是将命名空间添加到迁移文件名中,但他们必须将其命名为

2015_12_16_164131_database_migrations|create_users_table.php

这将转化为一个类

Database\Migrations\CreateUsersTable

|用来将命名空间与文件(类)名称分开,但整个事情有点奇怪,你不觉得吗?

此外,由于迁移需要按特定顺序执行,迁移文件名开头的日期和时间戳是强制性的,因此,这就是其中的一些原因。

于 2016-12-20T02:36:11.437 回答