过去一周我一直在学习MVC,特别是Laravel PHP框架。我已经注册了Laracasts,我对MVC模式的工作方式有了基本的了解,但是有一件事没有向我解释,就是何时使用模型。
每次我演示了模型是什么时,它都会扩展Eloquent
并链接到数据库表。 Jeffrey Way特别指出不要混淆&#34; model&#34;使用&#34; table&#34;,所以我假设您可以创建和使用未链接到数据库表的模型,但我不确定何时这样做。< / p>
此外,我对此并不完全确定:我何时应该使用模型,何时应该使用帮助程序类/库? Laravel documentation不涵盖模型非常详细,主要讨论Eloquent。
我可以想到两个例子,我不确定我的代码应该放在哪里:
假设我有一组Article extends Eloquent
模型提供的文章,链接到articles
数据库表。如果我想创建一组指向其他网页的动态导航链接会发生什么,例如previous
文章,next
文章,文章nearby
和similar
制品
这将是一个非常大而且关键的网站组件。我可以想象前面四个代码突出显示的示例中的每一个都是一个类的方法,但该类本身应该是一个独立的模型,还是仅仅是Article
的辅助类?
假设每篇文章都以易于书写的形式嵌入其中的图像。我可以编写一个ImageBuilder
类来解析每篇文章,并根据图像类型以及它在文档中应该具有的位置,用复杂的HTML替换我的嵌入式用户友好图像语法。
这似乎高度依赖于Article
类本身,所以我倾向于将它作为辅助类而不是模型本身,但我仍然不确定。
区别在哪里?我在哪里划线?特别是我的例子,你会推荐什么?
答案 0 :(得分:1)
我不是关于这个主题的全部,但会给你我两分钱。我相信你会得到别人的一些好建议,他们比我好得多。我将尽力保持这一点,但无论如何,这并非详尽无遗。
我应该何时使用模型,何时应该使用帮助程序类/库? 您不希望听到的答案取决于您的应用。为简洁起见,请将模型视为应用程序中项目的蓝图。这些是诸如帖子,页面,文章,图像,用户等之类的东西。构成你的应用程序的所有东西,每个东西都有关于它们如何相互关联和创建的规则。如果你看到这个项目一次又一次地重复使用它可能是一个模型!
现在谈谈你的具体例子:
导航创建者
对我来说,previous
,next
,nearby
和similar
都是Article
模型中的custom query scopes。这些方法将帮助您以特定方式搜索该模型。我会更新查询范围,因为它们为您的模型提供了大量的功能和灵活性。这样的东西可以帮助你的文章模型。
public function scopePrevious($query)
{
$currentArticleId = $this->id;
$previousArticleId = $this->id - 1;
return $query->where('id', '=', $previousArticleId);
}
这可以在搜索上一篇文章时使用:
$article->previous();
这可能没有经过测试,但只是一个例子。
图片构建器
这取决于您是否使用WYSIWYG编辑器或如何附加图像。我非常喜欢为Images创建一个单独的模型,然后使用多态关系,这样我就可以在整个应用程序中使用它们,让它们与需要图像的任何其他模型进行交互。
您可以查看Polymorphic relationships中可能附加到应用程序多个部分的评论,图片和文档等内容。
如果您正在使用WYSIWYG并且您必须进行大量解析,并且实际上没有图像的任何数据库条目,那么在单独的文件夹中加载的辅助类可能是最好的。