Laravel DB种子不自动加载模型类

时间:2014-06-25 14:36:00

标签: php laravel vagrant composer-php

在Laravel 4.2中,我突然遇到一个问题,当我尝试php artisan db:seed时,它不会自动加载我的模型类。奇怪的是,它昨天工作正常,但现在今天它还没有。

我尝试了一些非常简单的东西:

DatabaseSeeder.php     

class DatabaseSeeder extends Seeder {

public function run()
{
    Eloquent::unguard();

    Song::truncate();

    $this->call('SongsTableSeeder');
    $this->command->info('Songs table seeded!');
}

}

SongsTableSeeder.php     

class SongsTableSeeder extends Seeder {

    public function run() 
    {
        $song = [
            // all my fields
        ];
        Song::create($song);

    }

}

当我运行php artisan db:seed时,我收到此错误:

Class 'Song' not found in /path/to/app/database/seeds/DatabaseSeeder.php

我已多次尝试composer dump-autoload php artisan dump-autoload以及composer update。我也尝试过use App\Models\Song;

如果我在这两个文件中显式加载类:autoload

然后我的数据库正确播种。但是,这种打败了Laravel的自动加载器,对吧?

composer.json的{​​{1}}部分如下:

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]
},

我的Song模型( Song.php )如下所示:

<?php namespace App\Models;

class Song extends \Eloquent {

protected $table = 'songs';

}

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

<?php namespace App\Models;   class Song extends \Eloquent {

如果您希望将歌曲模型放在全局命名空间中,请不要将其放在命名空间中。否则,您必须use App\Models\Song;才能加载它。一旦你这样做,它应该适用于你的播种机。如果您需要在不同的命名空间内使用它,那么您需要使用use Song;

从全局命名空间中引入它