3

データベース シードを (他のコンソール コマンドと一緒に) 実行すると、名前の競合が発生します。

私のモデルはすべてapp/Modelsディレクトリに保存され、App\Models名前空間にあります。このディレクトリModel.phpには、laravel 基本モデルを拡張するという基本モデルがあります。

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;

abstract class Model extends BaseModel {}

私のモデルのいくつかは、この基本クラスを拡張します。たとえば、

<?php namespace App\Models;

class User extends Model {}

私のモデルのいくつかは雄弁なモデルを直接拡張しています。

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sport extends Model {}

私のアプリケーションが http 経由でアクセスされる場合、これは正常に機能し、名前の競合はありません。ただし、 などのコンソール コマンドを実行しようとするとdb:seed、次のエラーが表示されます。

PHP Fatal error:  Cannot use Illuminate\Database\Eloquent\Model as Model because the name is already in use in /home/vagrant/Code/wisletics/app/Models/Sport.php on line 3

私の最初の推測では、laravel が何らかの形でシード ファイルをコンパイルし、それが競合を引き起こしていると考えています。誰かアイデアを持っていますか、それとも他の誰かがすでにこの問題に遭遇していますか?

4

2 に答える 2

3

問題は

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Sport extends Model {}

App\Models\ModelPHP がSport( ) の親クラスを取得しようとすると、実際にまたはを要求するかModelどうかを判断できません。App\Models\ModelIlluminate\Database\Eloquent\Model

この問題は、実際に次のように変更することで解決できます。

<?php namespace App\Models;

use Illuminate\Database\Eloquent\Model as BaseModel;

class Sport extends BaseModel {}

更新:シード中にこれが表示されるのはなぜですか? Laravel 5 は PSR-4 を使用しており、要求されるまでモデルをロードしません。これは、実行しようとしたときに発生しますSportTableSeeder

于 2015-02-26T12:16:04.413 に答える