将 Laravel 5 Eloquent 模型移动到它自己的目录中

Posted

技术标签:

【中文标题】将 Laravel 5 Eloquent 模型移动到它自己的目录中【英文标题】:Move Laravel 5 Eloquent models into its own directory 【发布时间】:2015-05-17 02:49:30 【问题描述】:

Laravel 5 默认在 app 文件夹中有 ORM 模型。我想将这些移动到应用程序/模型中。当我这样做时,这些类就找不到了。

如何让 Laravel 从 app/models 中找到 Eloquent ORM 模型?

【问题讨论】:

【参考方案1】:

"app/models" 添加到composer.json 的类映射自动加载部分

"autoload": 
    "classmap": [
        "database",
        "app/models"
    ]

【讨论】:

我之前试过了,还是不行。现在,由于 lukasgeiter 建议使用 composer dump-autoload,它可以找到这些类。 谢谢,我正在阅读的其他解决方案中缺少此建议作曲家更新,但它对我有用! @Dallin 我确实按照您的建议更新了 composer json。我也跟着 SaintPlay 回答。但它似乎无法正常工作。当我在控制器中使用模型时,就像几页确实有效。但有些页面仍然抛出 App\ModelName 错误。该模型似乎没有反映这种变化。我做了几次转储自动加载,也做了缓存:清除,视图:清除。我该如何调试这些问题? @Dallin 我在做 composer dump-autoload Warning: Ambiguous class resolution, "App\Models\Company" was found in both "$baseDir . '/app/Models/Company.php" and "C:/Users/murli/laravel/Bookings/app/models/Company.php", the fi rst will be used. 时得到这些 我也遇到过同样的问题,发现解决方案在于确保参考文献 100% 正确。将“app/models”更改为“app/Models”为我修复了它。【参考方案2】:

只需创建一个名为Models 的文件夹并将您的文件移动到其中。之后,将模型的命名空间从 App 更改为 App\Models(同时更新用法)并运行 composer dump-autoload

【讨论】:

composer dump-autoload 丢失了,现在它与 composer.json 自动加载结合使用。我不想开始更改类命名空间。 如果使用它,不要忘记更改 UserModel 进行身份验证。另请参阅:laravel-recipes.com/recipes/11/…【参考方案3】:

Laravel 5.6+ 解决方案


1。将文件移动到新目录

假设您要将模型移动到app/Models

2。更改模型的命名空间

对于每个模型更改:

namespace App;

namespace App\Models;

3。更改其他文件中的引用

检查这些文件并特别搜索app\User

app/Http/Controllers/Auth/RegisterController.php config/auth.php config/services.php database/factories/ModelFactory.php database/factories/UserFactory.php 您的控制器

并将App/ModelExample 更改为App/Models/ModelExample

4。自动加载文件

运行composer dump-autoload

5。恭喜!

【讨论】:

刚刚更新到 5.4 并且有点挣扎。出色的指示。谢谢。 @SaintPlay 我尝试了上述步骤,但似乎无法正常工作。当我在控制器中使用模型时,就像几页确实有效。但有些页面仍然抛出App\ModelName 错误。该模型似乎没有反映这种变化。我做了几次转储自动加载,也做了缓存:清除,视图:清除。我该如何调试这些问题? @SaintPlay 我在做 composer dump-autoload Warning: Ambiguous class resolution, "App\Models\Company" was found in both "$baseDir . '/app/Models/Company.php" and "C:/Users/murli/laravel/Bookings/app/models/Company.php", the fi rst will be used. 时得到这些 @MurlidharFichadia 你用的是什么版本的 laravel? @SaintPlay 我使用的是最新的 Laravel 5.6。我不得不将所有内容恢复为默认值。我未能将所有模型移动到模型文件夹中。我做了 php artisan confg:clear, cache:clear, view:clear【参考方案4】:

在移动模型文件夹中的所有文件之后。你需要做的是运行:

composer dump-autoload

这对我有用。 :)

【讨论】:

如果不将 App\Models 文件夹添加到 composer.json 的类映射中,这是否有效?如果是这样,它怎么可能?无论如何,我认为需要更新每个模型的命名空间,对吧? 已经在其他项目中尝试过它应该可以在不向 composer.json 添加类映射的情况下工作。欲了解更多信息,请查看此链接medium.com/@codingcave/…【参考方案5】:

在完成@Saint Play 步骤之后。我不得不做php artisan config:clear。然后就成功了!

【讨论】:

以上是关于将 Laravel 5 Eloquent 模型移动到它自己的目录中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5 Eloquent - 将计算值作为列添加到集合

Laravel 5.1 文档攻略 —— Eloquent:模型对象序列化

Laravel 5 - 使用 Mockery 模拟 Eloquent 模型

Laravel 5.0 用户 Eloquent 模型嘲讽

Laravel 5.2 pluck() 来自 Eloquent 模型集合的多个属性

Laravel 5:工作时间的 Eloquent & form 模型