Laravel数据库种子没有自动加载模型类


Laravel DB Seeding not autoloading Model classes

在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-autoloadphp artisan dump-autoload。我也试过运行composer update

如果我在两个文件中显式加载类,如下所示:use App'Models'Song;

然后我的数据库被正确地播种。但是,这有点违背了拉拉威尔的自动装弹机的要点,对吧?

我的composer.jsonautoload部分看起来像:

"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';
}

有什么想法吗?

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

如果你想把你的歌曲模型放在全局命名空间中,那么不要把它放在命名空间中。否则,你必须使用use App'Models'Song;才能加载它。一旦你这样做,它应该对你的Seeder有效。如果您需要在不同的命名空间中使用它,则需要使用use Song; 从全局命名空间中引入它