在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';
}
有什么想法吗?
答案 0 :(得分:2)
<?php namespace App\Models; class Song extends \Eloquent {
如果您希望将歌曲模型放在全局命名空间中,请不要将其放在命名空间中。否则,您必须use App\Models\Song;
才能加载它。一旦你这样做,它应该适用于你的播种机。如果您需要在不同的命名空间内使用它,那么您需要使用use Song;