Laravel DB заполнение классов моделей без автоматической загрузки


В 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 AppModelsSong;

Тогда моя база данных будет правильно заполнена. Но этот вид поражений точки автозагрузчик фреймворк Laravel, верно?

Раздел autoload моего composer.json выглядит так:

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

И мояSong модель (песня.php ) выглядит так:

<?php namespace AppModels;

class Song extends Eloquent {

protected $table = 'songs';

}

Есть идеи?

1 2

1 ответ:

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

Если вы хотите, чтобы ваша модель песни находилась в глобальном пространстве имен, не помещайте ее в пространство имен. В противном случае вам придется use App\Models\Song;, чтобы загрузить его. Как только вы это сделаете, это должно сработать для вашей сеялки. Если вам нужно использовать его внутри другого пространства имен, вам нужно будет ввести его из глобального пространства имен с помощью use Song;