繁体   English   中英

Laravel - 找不到模型类

[英]Laravel - Model Class not found

开始使用模型时出现以下错误

找不到类帖子`。

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

我使用了以下代码:

路由器.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 模型类

Laravel 5 提倡在模型和控制器等事物中使用命名空间 您的模型位于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

我遇到了相同的“找不到类 [类名]”错误消息,但这不是命名空间问题。 我所有的命名空间都设置正确。 我什至尝试了composer dump-autoload并没有帮助我。

令人惊讶的是(对我来说)然后我做了composer dump-autoload -o根据 Composer 的帮助,“优化 PSR0 和 PSR4 包以加载类映射,这对生产有好处。” 不知何故,这样做让作曲家在 autoload_classmap.php 文件中正确地表现并包含该类。

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

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

php artisan make:model myModel

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

namespace App\ModelFolder;

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

php artisan make:model ModelFolder\\myModel

我有同样的问题,但事实证明作曲家为 Laravel 8.* 创建了一个单独的模型文件夹,所以而不是

use App\Post;

我不得不写:

use App\Models\Post;

在你的router.php文件中,你应该像这样使用模型类

 use App\Models\Post;

并像这样使用模型类。

Route::get('/posts', function() {

        $results = Post::all();
        return $results; });

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

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

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

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

  2. 在文件app/Services/Registrar.php的开头将“use App\User”更改为“App\Models\User”

编辑模型文件时请务必小心。 例如,在您的帖子模型中:

<?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 类)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM