2016-12-20 7 views
3

私は今Laravel 5.1を使用しています。なぜLaravel移行クラスに名前空間がないのですか?

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コードスニファは、非標準を指摘しますのメッセージ '各クラスは少なくとも1レベルの名前空間に属している必要があります'

私は[https://laravel.com/docs/5.1/migrations]と検索結果のトップバッチでは答えられませんでした。 stackoverflowに関する関連する質問は私をクリアしません。

理由を知っている人がいますか、何かヒントを教えてください。ありがとう!

答えて

4

基本的にはデザイン上の問題です。名前空間の移行を使用している人がいます。しかし、マイグレーションによって、マイグレーション・データベース・テーブルにマイグレーションがロードされて格納される方法は、名前空間を持つことが問題になります。それを少し調べると、クラスの名前が移行ファイルの名前の一部であり、Laravelがその名前を使用してマイグレーションクラスをインスタンス化して実行する必要があることがわかります。それが名前空間を持つと、例えば、同じ基本クラス名(クラス名から名前空間を引いたもの)を持つ2つの異なるクラスにつながる可能性があり、衝突して見つけることは非常に困難です。私は|にを使用していますそのための解決策は、マイグレーションファイル名に名前空間を追加することですが、彼らはそれに名前を付けるためにクラスに

Database\Migrations\CreateUsersTable 

を翻訳します

2015_12_16_164131_database_migrations|create_users_table.php 

のようなものを持っているでしょう名前空間をファイル(クラス)名から分離してください。しかし、全体が奇妙になりました。

また、マイグレーションは特定の順序で実行する必要があるため、マイグレーションファイル名の冒頭にある日付とタイムスタンプは必須です。したがって、それはいくつかの理由です。

+0

私は上記の '解決策'を理解していません。既にlaravelによって実装されていますか、または 'マイグレーションクラスに名前空間があるかどうか'を説明する例はありますか? – cjli

関連する問題