我使用Laravel,使用Eloquent,默认的ORM。
文档暗示了控制器中的ORM调用很好,但这并不是正确的。
例如,让我们说我想要一个用户。 User::findOrFail($id)
是我需要的代码。 documentation在控制器内部有这个。
想象一下,我在整个项目中的100个位置都有这些代码,我需要再挂一个检查,也许是为了让那些同时拥有自己账号的用户。这有点麻烦,但是在模型中我只是更新模型方法。
此实例中的示例模型方法:
function get_user_by_id($id)
{
return User::findOrFail($id);
}
这样做的缺点是模型很快就会变得庞大。
那么,这里最好的做法是什么?
答案 0 :(得分:0)
你应该放在哪里?
问问自己是否需要封装那段代码。如果您回答是,请将其放入模型中。否则,继续从控制器调用它。
他们会变得太大吗?
Eloquent模型已经包含了如此多的功能,因为ORM使用了活动记录模式,而不是像Doctrine这样的数据映射器。所以你的模型可能不会变得太大,因为许多功能已经被继承,你很少需要自己编写。
您对结构的更多控制会更高兴吗?
如果您过于担心数据库层的结构并希望将separation of concerns principle应用于内核,请改用Doctrine。所以你会感觉更好。但我真的认为Eloquent对大多数情况都应该没问题。