Laravel 5找不到Eloquent模型

6

我刚接触Laravel,现在正在尝试将模型加载到数据库中进行填充,但遇到了困难。我尝试了Laravel 4中composer.json和Laravel 5 PSR-4的方法。

DatabaseSeeder.php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder {

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        \App\Models\Client::truncate();
        \App\Models\Module::truncate();
        \App\Models\ModuleConnection::truncate();

        Model::unguard();

        $this->call('ClientsTableSeeder');
        $this->call('ModulesTableSeeder');
        $this->call('ConncetionsTableSeeder');
    }

}

Client.php

这些代码目前在app\Models中,但我也将它们放在了Users.php旁边的app文件夹中进行尝试。

namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;

class Client extends \Eloquent {
    proteced $fillable = ['id', 'name', 'email', 'created_at', 'updated_at'];
}

Module.php

namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;

class Module extends \Eloquent {
    proteced $fillable = ['id', 'name', 'created_at', 'updated_at'];
}

ModuleConnection.php

namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;

class ModuleConnection extends \Eloquent {
    proteced $fillable = ['id', 'clientid', 'moduleid', 'apiconn', 'created_at', 'updated_at'];
}

错误

当我运行php artisan db:seed命令时出现的错误。

[Symfony\Component\Debug\Exception\FatalErrorException]  
Class 'App\Models\Client' not found 

我确定这是我作为初学者所遗漏的一些愚蠢的东西!谢谢!

你能确认一下你的模型文件夹名字前面有一个大写的 Models 吗?另外,在定义命名空间后,你忘记加上这段代码了:use Illuminate\Database\Eloquent\Model; 除非你像这样指定,否则你必须扩展 Model 而不是 Eloquentuse Illuminate\Database\Eloquent\Model as Eloquent。然后运行这个命令:composer dump-autoload - Faiz
感谢迄今为止Faiz提供的帮助。文件夹名称是大写的,是的。我按照您在我的帖子中建议的方式编辑了代码 - 仍然出现相同的错误。不过也许是最后一个超类部分搞错了。 - Austin Heerwagen
你是否已经重命名了你的应用程序?你是否曾经运行过 php artisan app:name 命令?如果是这样,你需要使用该名称而不是 'App'。 - Patrick Stephan
1个回答

1
首先,您可能需要扩展Eloquent而不是\Eloquent。当您在使用上添加\时,您告诉PHP在其根命名空间中查找Eloquent。因此:
namespace App\Models;
use Illuminate\Database\Eloquent\Model as Eloquent;

class Module extends Eloquent {
    proteced $fillable = ['id', 'name', 'created_at', 'updated_at'];
}

其次,由于您的 Laravel 安装已包含您的 App 命名空间,因此无需执行 composer dumpautoload
"autoload": {
    ...
    "psr-4": {
        "App\\": "app/"
    }
},

这段文字是告诉自动加载器在app/路径中搜索你的命名空间类。需要检查的是文件Client.php是否在该文件夹中。
app/Models/Client.php

除此以外,我并没有在你的代码中看到任何问题。至于命名,就按照原来的名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接