ORM调用应该在模型还是控制器内?

时间:2015-07-06 10:39:00

标签: php laravel orm laravel-5

我使用Laravel,使用Eloquent,默认的ORM。

文档暗示了控制器中的ORM调用很好,但这并不是正确的。

例如,让我们说我想要一个用户。 User::findOrFail($id)是我需要的代码。 documentation在控制器内部有这个。

想象一下,我在整个项目中的100个位置都有这些代码,我需要再挂一个检查,也许是为了让那些同时拥有自己账号的用户。这有点麻烦,但是在模型中我只是更新模型方法。

此实例中的示例模型方法:

function get_user_by_id($id)
{
    return User::findOrFail($id);
}

这样做的缺点是模型很快就会变得庞大。

那么,这里最好的做法是什么?

1 个答案:

答案 0 :(得分:0)

你应该放在哪里?

问问自己是否需要封装那段代码。如果您回答是,请将其放入模型中。否则,继续从控制器调用它。

他们会变得太大吗?

Eloquent模型已经包含了如此多的功能,因为ORM使用了活动记录模式,而不是像Doctrine这样的数据映射器。所以你的模型可能不会变得太大,因为许多功能已经被继承,你很少需要自己编写。

您对结构的更多控制会更高兴吗?

如果您过于担心数据库层的结构并希望将separation of concerns principle应用于内核,请改用Doctrine。所以你会感觉更好。但我真的认为Eloquent对大多数情况都应该没问题。