在 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
时,出现此错误:
在/path/to/app/database/seeds/DatabaseSeeder.php 中找不到类“Song”
我已经多次尝试运行composer dump-autoload
以及php artisan dump-autoload
。我还尝试过运行composer update
。
如果我在两个文件中显式加载该类,如下所示:use App\Models\Song;
然后我的数据库就被正确播种了。但是,这违背了 Laravel 自动加载器的初衷,对吧?
我的 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 {
如果您希望将歌曲模型放在全局命名空间中,则不要将其放入命名空间中。否则,您必须使用 App\Models\Song;
才能加载它。一旦你这样做了,它应该适用于你的播种机。如果您需要在不同的命名空间内使用它,则需要使用 use Song;
关于php - Laravel DB Seeding 不自动加载模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411577/