簡體   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