将 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 模型