在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;
然后我的数据库被正确地播种。但是,这有点违背了拉拉威尔的自动装弹机的要点,对吧?
我的composer.json
的autoload
部分看起来像:
"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;
从全局命名空间中引入它