【问题标题】:Laravel8: Class not found despite defining it in the modelsLaravel 8:尽管在模型中定义了类但未找到类
【发布时间】:2022-01-24 11:41:59
【问题描述】:

我使用了“clients.php”模型,但是当我在 ClientsController 中加载时

$clients= Client::all()->sortby('name');

我得到:找不到类“App\Http\Controllers\Admin\Client”

解决办法是什么?我知道如果我创建一个“客户端”模型,那么它应该在我的函数中加载为“客户端”

【问题讨论】:

  • 文件必须是Client.php 而不是clients.php
  • 你必须检查你是否在你的ClientController中导入了Clinet Model。如果未导入,则在您的 ClientController 顶部添加 use App\Models\Client;

标签: php laravel


【解决方案1】:

您应该使用完整的命名空间,例如(如果客户端模型存储在模型目录中):

$clients = \App\Models\Client::all()->sortby('name');

或者您可以在命名空间声明后的文件开头添加use App\Models\Client;,然后使用

$clients = Client::all()->sortby('name');

【讨论】:

    【解决方案2】:

    您必须导入客户端模型。如果你使用 Laravel 8 那么:

    use App\Models\Client;
    
    $clients = Client::all()->sortby('name');
    

    如果你使用 Laravel 7 或以下版本:

    use App\Client;
    
    $clients = Client::all()->sortby('name');
    

    【讨论】:

    • 正确的解决方案,只是,命名空间在 Laravel 版本中没有什么不同,而是取决于文件所在的位置(我个人在 Laravel 7 中也使用了 Models 文件夹)
    • @GertB。你说的对。但默认情况下,这将是正确的路径。
    【解决方案3】:

    你可以做到。 使用你的客户端控制器

    use App\Models\Client;
    

    然后

    $clients= Client::all()->sortBy('name');
    

    在您的控制器中调用直接模型。

    $clients = \App\Models\Client::all()->sortBy('name');
    

    【讨论】:

      【解决方案4】:

      如果您在 Controller 中提供了命名空间,但它仍然无法正常工作, 打开终端并输入“composer dump-autoload”。每当我有一个新模型时,我都会这样做。

      【讨论】:

      • 首先,这是评论,不是答案。接下来,创建不在 vendor 文件夹中的模型时,无需转储自动加载。即使模型存在于包中,自动加载使用模型命名空间作为路径,不需要转储自动加载。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多