【问题标题】:Laravel 5 Not Finding Eloquent ModelsLaravel 5 没有找到雄辩的模型
【发布时间】:2015-07-09 00:40:46
【问题描述】:

我是 Laravel 的新手,无法加载我的模型来为数据库做种。我已经尝试过 composer.json 的 Laravel 4 方法和 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');
    }

}

客户端.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'];
}

模块.php

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

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

模块连接.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 而不是 Eloquent 除非你这样指定。 use Illuminate\Database\Eloquent\Model as Eloquent。然后运行这个命令composer dump-autoload
  • 感谢 Faiz 到目前为止的帮助。文件夹名称是大写的,是的。我按照您在帖子中的建议编辑了代码 - 仍然是同样的错误。不过可能弄错了最后一个超类部分。
  • 您是否重命名了您的应用程序?你有没有运行过命令php artisan app:name?如果是这样,您将需要使用该名称而不是“App”

标签: php laravel laravel-4 eloquent laravel-5


【解决方案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'];
}

其次,不需要composer dumpautoload,因为您的 App 命名空间已包含在您的 Laravel 安装中:

"autoload": {
    ...
    "psr-4": {
        "App\\": "app/"
    }
},

这告诉自动加载器在 app/ 路径中搜索您的命名空间类。

你要检查的是文件Client.php是否在文件夹中:

app/Models/Client.php

并按原样命名。除此之外,我在您的代码中没有发现问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多