Laravel:模型名称和内置外观之间的冲突

标签 laravel eloquent models conflict

我的 Laravel 应用程序中有一个名为 Event 的模型。正如我刚刚发现的,这会在我的模型和内置外观 Illuminate\Support\Facades\Event 之间产生冲突。这里显而易见的解决方案是更改我的模型的名称,这并不理想,因为我实际上没有其他名称可以给我的模型提供任何有意义的名称,或者重命名 app.php 对于Illuminate\Support\Facades\Event,我想避免这样做,因为担心将来会破坏任何可能依赖该别名的东西(我担心我可能会忘记)。

有人建议我也许可以使用命名空间,我尝试如下:

app/models/Event.php

namespace Models; #<-- I've also tried using "\Models" here

class Event extends \Eloquent{

app/database/seeds/DatabaseSeeder.php

Models\Event::create();  #<-- again, I've also used "\Models\Event"

当我运行 php artisan db:seed 时,上述所有 4 个组合都产生了 Class 'Models\Event' not find 错误。

也许我只是没有正确理解命名空间,但更紧迫的问题是如何解决我的问题。如果可以按照建议使用命名空间来解决这个问题,那就太好了,但我也愿意接受任何其他想法。

最佳答案

我很早就犯了这个错误,不一定理解命名空间在整个应用程序中的作用。

命名空间应该标记应用程序本身的域或职责内的业务逻辑,因此提供模型的命名空间不一定有用。相反,创建一个以应用程序、您的公司、您或您喜欢的任何名称命名的根命名空间,然后提供模型子命名空间。

例如:

namespace MyGreatApp\Models;

class Event extends \Eloquent{ }

然后您可以在以下位置引用此模型:

use MyGreatApp\Models\Event;

$event = new Event();

从长远来看,这是一种更干净、更有组织的方法。但这确实意味着将您的模型移动到不同的文件夹中。但这并没有什么问题。至少这样您就知道您的 MyGreatApp 命名空间中拥有所有自定义代码。 :)

关于Laravel:模型名称和内置外观之间的冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25100642/

相关文章:

php - 如何在 Laravel 迁移中添加与另一列相同的默认值

php - '打开流失败 : Permission denied' error - Laravel 5. 1

php - max_execution_time 为 240 秒 - 超过 60 秒的超时

php - 拉维尔 4 : Where Not Exists

php - 根据 ID 列表与 Eloquent 进行连接

mysql - 从 Laravel 5.1 升级到 Laravel 5.8 后,whereHas() 速度变慢

sqlalchemy - 如何在 Nova 数据库中添加表 : Openstack

python - Django 新手关于使用模型中的子对象定义对象以在模板中使用的问题

laravel - 如何限制 whereHas 只匹配 where 条件?

amazon-web-services - Amazon lambda nodejs elasticache 在 redis 中存储数据