php - Laravel DB Seeding 不自动加载模型类

标签 php laravel vagrant composer-php

在 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.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 {

如果您希望将歌曲模型放在全局命名空间中,则不要将其放入命名空间中。否则,您必须使用 App\Models\Song; 才能加载它。一旦你这样做了,它应该适用于你的播种机。如果您需要在不同的命名空间内使用它,则需要使用 use Song;

从全局命名空间中引入它

关于php - Laravel DB Seeding 不自动加载模型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24411577/

相关文章:

php - 使用 PHP 将一系列 Google 文档(.csv 文件)下载到我的站点

php - PHP数组在C层面是如何实现的?

php - 如何对最后一条记录的一周内的列进行求和?

php - 获取输入类型单选的值并根据选择的类型重定向

nginx - Vagrant Docker Nginx 解决缓慢

php - 解析错误 : syntax error, 意外 'try' (T_TRY) in/customers/d/4/1/imanity.de/httpd.www/register.php 第 8 行

php - 只显示长度小于 php mysql 的注释

php - 从 Laravel 验证中获取错误消息

ruby - 无法安装 Vagrant 插件 - Gem 失败

gradle - 通过gradle任务连接到 Vagrant