Laravel-找不到模型类


Laravel - Model Class not found

当开始使用模型时,我得到了以下错误

找不到类帖子`。

我所做的一切:
-使用命令php artisan make:model创建模型
-尝试使用echo Post::all() 从表posts获取所有条目

我使用了以下代码:

router.php

Route::get('/posts', function(){
    $results = Post::all();
    return $results;
});

Post.php

<?php 
namespace App;
use Illuminate'Database'Eloquent'Model;
class Post extends Model {
    protected $table = 'posts';    
}

我尝试过的
-重命名类
-转储自动加载(未找到Laravel 4 Model类)

Laravel 5促进了名称空间在模型和控制器等方面的使用。您的Model位于App命名空间下,因此您的代码需要这样调用它:

Route::get('/posts', function(){
        $results = 'App'Post::all();
        return $results;
});

如注释中所述,您也可以use或将命名空间导入到文件中,这样您就不需要引用完整路径,如下所示:

use App'Post;
Route::get('/posts', function(){
        $results = Post::all();
        return $results;
});

当我对名称空间做一个简短的入门时,我还可以提到别名类的能力。这样做意味着您基本上可以在一个文件的范围内重命名类,如下所示:

use App'Post as PostModel;
Route::get('/posts', function(){
        $results = PostModel::all();
        return $results;
});

有关导入和别名名称空间的详细信息,请点击此处:http://php.net/manual/en/language.namespaces.importing.php

我收到了相同的"class[class-name]not found"错误消息,但这不是命名空间问题。我所有的命名空间都设置正确。我甚至试过composer dump-autoload,但它对我没有帮助

让我惊讶的是,我后来做了composer dump-autoload -o,根据Composer的帮助,"优化了PSR0和PSR4包,使其也能加载类映射,这对生产很有好处。"不知怎么的,这样做让Composer能够正确地将类包含在autoload_classmap.php文件中。

我在Laravel 5.2中遇到了同样的错误,结果发现模型类定义中的命名空间不正确。

我使用以下命令创建了我的模型:

php artisan make:model myModel

默认情况下,Laravel 5在App文件夹下创建模型,但如果你像我一样将模型移动到另一个文件夹,你也必须更改模型定义中的名称空间:

namespace App'ModelFolder;

在创建可以使用的模型时包括文件夹名称(不要忘记使用双斜杠):

php artisan make:model ModelFolder''myModel

我也遇到过同样的问题,但事实证明composer为Laravel 8.*创建了一个单独的Models文件夹,所以不是

use App'Post;

我不得不写:

use App'Models'Post;

编辑模型文件时一定要小心。例如,在您的后模型中:

<?php 
namespace App;
use Illuminate'Database'Eloquent'Model;
class Post extends Model {
    protected $table = 'posts';    
}

您需要密切关注class Post extend Model行。这里定义的类Post将是控制器的名称空间。

对我来说,创建一个没有.php扩展名的ModelClass文件真的很傻。所以调用那个并没有找到给定的模型。因此,请检查扩展是否有.php

我遇到了同样的问题。事实证明,我的Post模型在一个名为Post.php 的php文件中

=>文件名必须与类的名称匹配(Post.php文件中的Post类)

router.php文件中,您应该使用类似以下的模型类

 use App'Models'Post;

并像这样使用模型类。

Route::get('/posts', function() {
        $results = Post::all();
        return $results; });

Class not found错误的一个原因是字符区分大小写,所以如果命名空间是namespace App'Model;,如果您像这里的App'model'User一样调用它,则由于model而显示错误Class not found=Model

如果您使用OPCache,可能由于某种原因,您的类在OPCache中没有索引,因此您必须通过重新启动PHP来重新索引这些类(下面的示例适用于Nginx和Ubuntu上的PHP 8.1 FPM)。

sudo service php8.1-fpm restart

正如@bulk所说,它使用名称空间。

我建议您开始使用IDE,它将建议您导入所有必需的名称空间(在本例中为'App'Post)。

如果在更改名称空间和config/auth.php后仍然失败,您可以尝试以下操作:

  1. 在文件vendor/composer/autoload_classmap.php中更改线路CCD_ 21,到App''Models''User' => $baseDir . '/app/Models/User.php',

  2. 在文件app/Services/Registrar.php的开头,将"use App''User"更改为"App''Models''User"