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

时间:2014-08-03 00:44:02

标签: laravel eloquent models conflict

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

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

应用/模型/ Event.php

Illuminate\Support\Facades\Event

应用/数据库/种子/ DatabaseSeeder.php

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

class Event extends \Eloquent{

当我运行Models\Event::create(); #<-- again, I've also used "\Models\Event" 时,上述所有4种组合都会出现Class 'Models\Event' not found错误。

也许我根本不理解命名空间,但更紧迫的问题是如何解决我的问题。如果它可以像建议的那样使用名称空间来解决,那很好,但我也对任何其他想法持开放态度。

1 个答案:

答案 0 :(得分:3)

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

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

例如:

namespace MyGreatApp\Models;

class Event extends \Eloquent{ }

然后你会在下面引用这个模型:

use MyGreatApp\Models\Event;

$event = new Event();

从长远来看,这是一种更清洁,更有条理的方法。但这确实意味着将模型移动到不同的文件夹中。但这并没有错。至少就是这样,您知道MyGreatApp命名空间中包含所有自定义代码。 :)